Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
easyflash
EasyFlash的blob模式,整型变量怎样初始化?
发布于 2021-10-26 18:28:21 浏览:1003
订阅该版
文件《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
被浏览
1k
关于作者
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
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
NXP MCXN947测评(二)ETH设备使用
2
【RA8D1-Vision Board】适配 LVGL V8
3
VISION BOARD 第二弹 基础工程配置和点亮一个LED灯
4
musb移植问题记录【设备注册3次挂起】
5
关于使用CherryUSB时候使用外挂的usb phy 芯片配置的一点注意事项
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
RT-Thread
DMA
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
keil_MDK
编译报错
socket
MicroPython
GD32
msh
Debug
ulog
SDIO总线
SFUD
rt_mq_消息队列_msg_queue
C++_cpp
本月问答贡献
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
三世执戟
31
个答案
1
次被采纳
梦笑真美
18
个答案
1
次被采纳
踩姑娘的小蘑菇
14
个答案
1
次被采纳
本月文章贡献
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
2345vor
2
篇文章
1
次点赞
比特饼干
1
篇文章
6
次点赞
Vangaoven
1
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部