搜索
bottom↓
回复: 25

如何将float类型浮点数保存到eeprom中?

[复制链接]

出0入0汤圆

发表于 2006-1-11 20:02:38 | 显示全部楼层 |阅读模式
如何将float类型浮点数保存到eeprom中?

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2006-1-11 20:33:10 | 显示全部楼层
你用的是icc吗?见eeprom.h,

“#define EEPROM_READ(addr, dst) EEPROMReadBytes(addr, &dst, sizeof (dst))”

出0入0汤圆

 楼主| 发表于 2006-1-11 20:34:52 | 显示全部楼层
我用的是codevision

出0入0汤圆

发表于 2006-1-11 21:33:31 | 显示全部楼层
eeprom float a_eep = 0;

a_eep = 1.1;

出0入0汤圆

发表于 2006-1-12 18:44:37 | 显示全部楼层
如果是用IAR怎么办?

出0入0汤圆

发表于 2006-1-12 22:44:20 | 显示全部楼层
联合变量

出0入0汤圆

发表于 2006-1-13 10:01:07 | 显示全部楼层
把float类型分拆為4個unsigned char

出0入0汤圆

 楼主| 发表于 2006-1-13 19:59:39 | 显示全部楼层
问题已经解决,

  我将float类型数据乘以100然后再转换成long型存进eeprom,就可以保存两位小数。读的时候再反过来转换一下。呵呵,经验共享。

出0入0汤圆

发表于 2006-1-13 23:05:16 | 显示全部楼层
用指针不就行了?

float a;

unsigned char *p;

p=(unsigned char*)(&a);

把p后面的四个数存起来

出0入0汤圆

发表于 2006-1-13 23:10:56 | 显示全部楼层
可以用强制类型转换,存入时将4字节的float转换为char指针的,读出时在强制将4字节的char转换为float的。如果用codevision ,不知能不能直接读写,你可以试一试。

出0入0汤圆

发表于 2010-6-19 22:19:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-8 14:19:55 | 显示全部楼层
把所需要存取的浮点数和一个数组(char i[4])构成一个联合,存取的时候用数组,使用的时候用浮点数,如下:

union myfloat
{
    char i[4];
    float j;
}
写:
EEPROM_WRITE(0,myfloat.i[0]);
EEPROM_WRITE(1,myfloat.i[1]);
EEPROM_WRITE(2,myfloat.i[2]);
EEPROM_WRITE(3,myfloat.i[3]);
读:
myfloat.i[0]=EEPROM_READ(0);
myfloat.i[1]=EEPROM_READ(1);
myfloat.i[2]=EEPROM_READ(2);
myfloat.i[3]=EEPROM_READ(3);
使用浮点数:
float k=myfloat.j;

出0入0汤圆

发表于 2010-11-8 15:01:25 | 显示全部楼层
用联合是好的解决办法!

出0入0汤圆

发表于 2011-6-6 19:01:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 20:34:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 22:13:34 | 显示全部楼层
按照你接受的误差范围,把FLOAT放大1万倍或100万倍,呵呵

出0入0汤圆

发表于 2011-7-15 22:14:26 | 显示全部楼层
wo,又挖坟了

出0入0汤圆

发表于 2011-7-19 09:57:17 | 显示全部楼层
联合体挺好!

出0入0汤圆

发表于 2011-8-8 23:57:58 | 显示全部楼层
这个好,

出0入0汤圆

发表于 2011-8-9 02:02:20 | 显示全部楼层
alternatively, you can use a (char) pointer and increment it each time you save it in eeprom:

unsigned char * eeprom_ptr;

eeprom_ptr = (unsigned char *) & my_float; //my_flat is defined as a 32-bit double/float
EEPROM_WRITE(* eeprom_ptr++); //save byte0
EEPROM_WRITE(* eeprom_ptr++); //save byte1
EEPROM_WRITE(* eeprom_ptr++); //save byte2
EEPROM_WRITE(* eeprom_ptr++); //save byte3

出0入0汤圆

发表于 2011-8-16 09:36:51 | 显示全部楼层
回复【19楼】millwood0  
-----------------------------------------------------------------------

How to read the datas from the inner EEPROM?

出0入0汤圆

发表于 2011-8-16 10:17:39 | 显示全部楼层
mark!!!

出0入0汤圆

发表于 2011-8-16 14:14:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-9-10 13:10:10 | 显示全部楼层
同求合理答案

出0入0汤圆

发表于 2014-11-14 18:41:02 | 显示全部楼层
联合体果然是个好东西!

出0入0汤圆

发表于 2014-11-14 20:09:14 | 显示全部楼层
Mark!!!!!!浮点数储存
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 04:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表