本文共 1268 字,大约阅读时间需要 4 分钟。
在开发项目过程中,经常用到flash存数据,但有时数据长度是确定的,比如说用户参数配置之类的,但有时有的数据长度是不确定的,如长度多包大数据,每包格式一样,但总数据量可变的数据
(1)前期定义:
typedef struct{ uint16_t data_len; uint8_t data[1000];}STU_BOOD_METER; //
STU_BOOD_METER STU_Bloodmeter;//结构体申明#define DATA_HEAD_2g 0xCCCCCCCC//用于确定是否flash写过数据#define MAX_BUF_LEN ((sizeof(STU_Bloodmeter )+3)/4)//结构体最大长度
前面两个字节定义长度,后面定义数据
(2):读取数据操作**
(3)写入数据操作 用标志位save_2g_flash_fla,uint8_t save_2g_flash_fla =0;void set_save_2g_flash(void){ save_2g_flash_fla=1;}void task_Write_2g_flash(void){ if(save_2g_flash_fla==0) return; save_2g_flash_fla =0; uint32_t data_head= DATA_HEAD_2g; Flash_Erase_Page(FLASH_QUEUE_ADDR/PAGE_SIZE);//HIS_ADDR RSV1_ADDR Flash_Write_World((uint32_t *)FLASH_QUEUE_ADDR,&data_head,1); Flash_Write_World((uint32_t *)(FLASH_QUEUE_ADDR+4),(uint32_t *)&STU_Bloodmeter.data_len,MAX_BUF_LEN/4); }
(4)得到用户数据后,存于结构体
每次得到数据加上偏移地址,后调用set_save_2g_flash(),存于flashtypedef struct{ char* root_ca; char* client_cer; char* client_p_key;}SSL_CER_FILE;
用g_ssl_file.root_ca = (char*)malloc(user_para.ca_cer_len+1); // 分配内存
nvs_read_ssl_data_from_flash(1,g_ssl_file.root_ca);//&user_para.ca_cer_len); /* 读取证书 */ 用malloc得到数据,这样结构体就没必要定义确定的长度,但需要确认flash能存多大数据可以加入QQ群:687360507 与大伙沟通交流,技术在于分享而进步
转载地址:http://qvgyf.baihongyu.com/