stm32外设w25Q128存取浮点数问题解决

前言

昨天总结制作了w25Q128外设的存取,但留下了不能存储double类型的疑问,哎,想了半天,还真让我给我找到了。对于我这种拿来主义,思考原理从来不是现阶段需要考虑的事,能解决问题就先上再说。原理用到再去思考吧。

解决方法

  1. 这里使用的是联合体的解决方法,第六感告诉我似乎一定还有其他的解决方案,比如改方法代码的uint8_t。
  2. 首先看一下联合体的定义:联合体也是一种构造数据类型,和结构体类型一样,它也是由各种不同类型的数据组成,这些数据叫作联合体的成员。不同的是,在联合体中,C语言编译系统使用了覆盖技术。联合体的所有成员在内存中具有相同的首地址,共占同一段内存空间,这些成员可以相互覆盖,因此联合体也常常被称作共用体,在不同的时间保存不同的数据类型和不同长度的成员的值。
  3. 简单地说,这里使用的就是联合体成员在内存中具有相同的首地址
    比如:
typedef union{
	float f;
	char ch[4];
}DataU;

DataU DataTrans;

上面是定义联合体,下面是写入联合体f的值,我们不需要写入f,只需要写入4个ch数组的值,ch数组对应了浮点数的24位,float和char ch[4]使用的是一个空间大小的内存。

DataTrans.f = 0.123;
for (i = 0; i < 4; i++)
{
	DataBuffer[i] = DataTrans.ch[i];
}
W25Q128_Write((uint8_t*)DataBuffer,FLASH_SIZE-200,SIZE);

下面是读出f的值,也是借着数组读出,数组赋值好之后,f的值直接就存在了。

W25Q128_Read(datatemp,FLASH_SIZE-200,SIZE);	

for(i=0; i<4; i++)
{
	DataTrans.ch[i] = datatemp[i];
}
CV[1] = DataTrans.f;			

Serial_Printf("%f",CV[1]);
Serial_Printf("\r\n");

结尾

完整代码就不贴了,上一章有完整的读写完整的代码,根据上面的示例,加上联合体的内容,就可以读取了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值