Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
easyflash
EasyFlash的blob模式,整型变量怎样初始化?
发布于 2021-10-26 18:28:21 浏览:1261
订阅该版
文件《ef_def.h》里面有个结构体是这样定义的: ``` typedef struct _ef_env { char *key; void *value; size_t value_len; } ef_env, *ef_env_t; ``` 但是在文件《ef_port.c》里面,成员怎么就只有2个? ``` /* default environment variables set for user */ static const ef_env default_env_set[] = { {"iap_need_copy_app", "0"}, {"iap_copy_app_size", "0"}, {"stop_in_bootloader", "0"}, {"device_id", "1"}, {"boot_times", "0"}, }; ``` blob模式用整形变量,应该怎么初始化? 下载到的EasyFlash软件包,里面的demo是老模式的。 不是很确定blob模式怎么用,尤其是新增加的整数变量怎么用?怎么初始化? 求一个例程,谢谢!
查看更多
出出啊
2021-10-27
恃人不如自恃,人之为己者不如己之自为也
不得说一句,这两天论坛前端程序员搞的这个行内代码样式很丑,上面还有白底灰字的段代码样式。 ``` EfErrCode ef_set_env(const char *key, const char *value) { return ef_set_env_blob(key, value, strlen(value)); } ``` 看这个就明白了吧,第二个参数是字符串,第三个参数是字符串长度。 如果用 `ef_set_env` 函数,少写一个参数;如果用 `ef_set_env_blob` 自己指定长度,这种情况下,第二个参数不一定是字符串了,可以是任意内存地址,第三个参数就是内存数据字节个数。 对于整型变量,要么转成字符串;要么使用 ``` ef_set_env_blob(key, &value, sizeof(int)); ```
3
个回答
默认排序
按发布时间排序
李肯陪你玩赚嵌入式
认证专家
2021-10-27
2022年度和2023年度RT-Thread社区优秀开源布道师,COC深圳城市开发者社区主理人,专注于嵌入式物联网的架构设计
# 问题分析 我想你的核心问题,是想知道,如何在使用整型变量的情况下,完成static const ef_env default_env_set[]的初始化。 ```c 那么初始化默认值应该怎么写呢?直接写变量编译不通过的! static const ef_env default_env_set[] = { {"test_default", 123}, // 整型变量默认值 123,这样事编译不通过的。怎么初始化? {"iap_need_copy_app", "0"}, {"iap_copy_app_size", "0"}, {"stop_in_bootloader", "0"}, {"device_id", "1"}, {"boot_times", "0"}, }; ``` 这个编译不过的主要原因是,结构体ef_env的第二个变量的定义是:void *value,这是一个**指针**; 而你传入123,是个**整型数**,自然会报类型不兼容。 # 解决思路 有一个办法可以解决你上诉遇到的编译问题,参考代码: ```c static uint32_t g_def_value = 123; //默认123 static const ef_env default_env_set[] = { {"test_default", &g_def_value }, // 编译不会报错 {"iap_need_copy_app", "0"}, {"iap_copy_app_size", "0"}, {"stop_in_bootloader", "0"}, {"device_id", "1"}, {"boot_times", "0"}, }; ``` 虽然上面的代码不会编译报错,但是如果你多跟踪下这个set接口的实现,你会发现有问题: ```c EfErrCode ef_set_env(const char *key, const char *value) { return ef_set_env_blob(key, value, strlen(value)); } ``` 因为这个当你123那个初始化去调用的时候,最终是使用strlen(&g_def_value), 这样显然是有问题的,因为这是一个整型数的地址,使用strlen按字符串来处理,自然得不到期望的结果。 所以我是比较建议把整型数,转换成对应的字符串来存储处理,即类似这样: ```c static char g_def_value[] = "123"; //默认123 static const ef_env default_env_set[] = { {"test_default", g_def_value }, // 编译不会报错 {"iap_need_copy_app", "0"}, {"iap_copy_app_size", "0"}, {"stop_in_bootloader", "0"}, {"device_id", "1"}, {"boot_times", "0"}, }; ``` 这样你set的时候,需要将int转string;get出来的时候,记得使用atoi。 不知道以上有没有解决你的疑惑?
CharlesX
2021-10-26
Make science fiction science
只需要使用`EfErrCode ef_set_env(const char *key, const char *value)`函数储存数据即可,因为它也是调用的`ef_set_env_blob`函数。 1. > 但是在文件《ef_port.c》里面,成员怎么就只有2个? 因为第三个成员是长度,这里不写则默认值为“0”,在`ef_env_set_default`函数写入默认键值时会自动计算`value_len = strlen(default_env_set[i].value);`,且`“0”`等效为`“\\0”` 2. 不分什么“Blob模式”,任何数据类型最终都会以Blob格式储存,即`typedef struct _ef_env`格式 3. “新增加的整数变量”就很简单,比如: ```c uint32_t test; ef_set_env("test_default", &test); ``` 即可写入env;这里也无需写长度,自动计算很方便
撰写答案
登录
注册新账号
关注者
0
被浏览
1.3k
关于作者
OGCB_4574
这家伙很懒,什么也没写!
提问
14
回答
0
被采纳
0
关注TA
发私信
相关问题
1
easyflash 用来存储 传感器定时采样的数据适不适合?
2
easyflash存放于fat文件系统中,但是会擦除文件系统
3
EasyFlash移植失败,硬件发生错误?
4
easyflash demo擦写完数据后再上电就挂了?
5
easyflash初始化env无法自动写入默认环境变量?
6
有在STM32L4上用easyflash的么?请教个问题
7
[已解决] easyflash 使用内部 flash 无法保存参数
8
FAL 上的FlashDB、EasyFlash、EasyLogger调试经历
9
easyflash存储问题
10
easyflash可以用来存储300个小文件且能够按照日期分类检索吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
EtherKit快速上手PROFINET
2
RTThread USB转串口无法接收数据
3
HC32F4A0 SD卡挂载及热插拔的实现
4
vscode插件 - RT-Thread Studio项目助手 | 跨平台开发
5
Console串口使用说明
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
812
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
2
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
2
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部