W25Q64flash存储时如果要存浮点型数据怎么办?

2019-10-15 01:40发布

//写SPI FLASH   //在指定地址开始写入指定长度的数据 //该函数带擦除操作! //pBuffer:数据存储区 //WriteAddr:开始写入的地址(24bit) //NumByteToWrite:要写入的字节数(最大65535)    u8 SPI_FLASH_BUFFER[4096];   void SPI_Flash_Write(u8* pBuffer,u32 WriteAddr,u16 NumByteToWrite)    {  u32 secpos; u16 secoff; u16 secremain;      u16 i;     u8 * SPI_FLASH_BUF;       SPI_FLASH_BUF=SPI_FLASH_BUFFER;        secpos=WriteAddr/4096;//扇区地址   secoff=WriteAddr%4096;//在扇区内的偏移 secremain=4096-secoff;//扇区剩余空间大小      //printf("ad:%X,nb:%X ",WriteAddr,NumByteToWrite);//测试用   if(NumByteToWrite<=secremain)secremain=NumByteToWrite;//不大于4096个字节 while(1)  { SPI_Flash_Read(SPI_FLASH_BUF,secpos*4096,4096);//读出整个扇区的内容 for(i=0;i<secremain;i++)//校验数据 { if(SPI_FLASH_BUF[secoff+i]!=0XFF)break;//需要擦除     } if(i<secremain)//需要擦除 { SPI_Flash_Erase_Sector(secpos);//擦除这个扇区 for(i=0;i<secremain;i++)   //复制 { SPI_FLASH_BUF[i+secoff]=pBuffer;   } SPI_Flash_Write_NoCheck(SPI_FLASH_BUF,secpos*4096,4096);//写入整个扇区  
}else SPI_Flash_Write_NoCheck(pBuffer,WriteAddr,secremain);//写已经擦除了的,直接写入扇区剩余区间.    if(NumByteToWrite==secremain)break;//写入结束了 else//写入未结束 { secpos++;//扇区地址增1 secoff=0;//偏移位置为0  
  pBuffer+=secremain;  //指针偏移 WriteAddr+=secremain;//写地址偏移      NumByteToWrite-=secremain; //字节数递减 if(NumByteToWrite>4096)secremain=4096; //下一个扇区还是写不完 else secremain=NumByteToWrite; //下一个扇区可以写完了 }   };   }

如上函数所示,我想存一个浮点型数据比如1.234,该怎么办,难道要把浮点型先转成字符型,再存到字符数组里调用吗?有没有简便的方法?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
zenghi
1楼-- · 2019-10-15 05:15
浮点数据强制转换成字符BUF。 字符BUF读出来再强制转换成浮点数据。就这么简单。
正点原子
2楼-- · 2019-10-15 10:23
还是老办法,强奸法。
如:
float a;
a=1.234;
SPI_Flash_Write((u8*)a,100,4);
这样,就把浮点数a,写到地址100的地方了
然后读取的时候
SPI_Flash_Read((u8*)a,100,4);
就读出来了。
wan296555869
3楼-- · 2019-10-15 11:17
 精彩回答 2  元偷偷看……
wan296555869
4楼-- · 2019-10-15 12:04
回复【3楼】正点原子:
---------------------------------
谢谢原子哥教导 好形象的名字!
正点原子
5楼-- · 2019-10-15 14:37
 
wan296555869
6楼-- · 2019-10-15 18:28
回复【3楼】正点原子:
---------------------------------
老大为什么我按你的方法编译器会报错诶

一周热门 更多>