FLASH存储浮点数据的解决办法
需求:参数的数据类型为浮点数据,需要存储至FLASH中。解决办法:采用联合体联合体特性:联合体内的参数,共用一块内存。案例://构建联合体数据结构typedef union{floatfp;//浮点unsigned char ch[4];//单字节数组,组成4字节}fp_un;/****应变系数设置*/void strain_factor_set(float in_value){unsigned
·
- 需求: 参数的数据类型为浮点数据,需要存储至FLASH中。
- 解决办法:采用联合体
- 联合体特性:联合体内的参数,共用一块内存,互为依辅。
- 案例:
//构建联合体数据结构
typedef union
{
float fp;//浮点
unsigned char ch[4];//单字节数组,组成4字节
}fp_un;
/*
***应变系数设置
*/
void strain_factor_set(float in_value)
{
unsigned int tmp_dat=0;
fp_un fp={0};
fp.fp=in_value;
memcpy(&tmp_dat,&fp.ch[0],4);
/*函数原型:void NV_DAT_WRITE(unsigned int wr_addr,addr_type atype,unsigned int dat)*/
NV_DAT_WRITE(NV_FALSH_ADDR_1,LOW_ADDR,tmp_dat);//写入FALSH中
}
*效果
成功写入!
- 注意:
上面用到联合体存储,要注意大小端问题,在从FLASH读出的时候建议再用联合体读出,以保持大小端一致。
/*
***应变系数读取
*/
float strain_factor_get(void)
{
unsigned int strain_factor=0;//直接用这个变量会引发大小端错误问题,导致数据不一致
fp_un udat={0};
strain_factor=NV_DAT_READ(NV_FALSH_ADDR_1,LOW_ADDR);
memcpy(&udat.ch[0],&strain_factor,4);
return udat.fp;
}

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)