schlai 发表于 2010-6-21 09:45:18

IAR 中eeprom的访问(如何将一个float型的数据存入eeprom)

我是单片机新手,在应用中使用ATmega128单片机,IAR编程环境,

程序中需要使用eeprom存储数据

如何将一个float型的数据存入eeprom

__EEPUT(,)好像只能将一个字节的数据存入,

怎么能读出该float型数据并还原为原始数据呢?

   谢谢大家了

tclandmei 发表于 2010-6-21 09:49:19

不用IAR的库!自己写就行了吧!

icydream 发表于 2010-6-21 10:44:24

float 型转 int 型,自己确定一个精度,然后转到 long int等,自定规则就可以存了。
读取一样的,按照自定的规则,读取多个字节然后还原就行了。

例如,精度 到0.1的浮点数 120.1 ,转为 1201 ,变成两个字节存入EEPROM,读取的时候除10 就可以得到想要的数值了。

schlai 发表于 2010-6-21 10:56:40

谢谢2楼,我现在已经这样做了!

stm8s103 发表于 2010-6-21 11:13:05

把folat当做2进制数直接存储到eeprom

yc6602 发表于 2010-6-21 11:18:45

直接定义:
__no_init__eepromfloat eeprom_b1;

yidian16 发表于 2010-6-21 13:21:17

union
{
float a;
unsigned char b; //根据实际修改
}c;
读 存 c.b--c.b
使用c.a;

hpdell 发表于 2010-7-12 17:35:32

高人!!!

cuikai12345 发表于 2010-7-12 22:40:23

mark

oldmen 发表于 2010-7-12 23:36:00

jihao

millwood0 发表于 2010-7-13 02:21:01

yeah. Using union is the best approach, if your compiler doesn't support eeprom qualifier.

zyw19987 发表于 2012-4-10 10:40:53

union
{
float a;
unsigned char b; //根据实际修改
}c;
读 存 c.b--c.b
使用c.a;
存f的时候:
c.a = f;
memorysave(addr0,c.b);
memorysave(addr1,c.b);
memorysave(addr2,c.b);
memorysave(addr3,c.b);

读f的时候:

c.b = memoryget(addr0);
c.b = memoryget(addr1);
c.b = memoryget(addr2);
c.b = memoryget(addr3);

f = c.a;

花花世界大水牛 发表于 2013-12-27 14:37:56

zyw19987 发表于 2012-4-10 10:40
union
{
float a;


受益了,谢谢。仔细想想还能在union中放struct

信果 发表于 2014-4-1 00:05:48

zyw19987 发表于 2012-4-10 10:40
union
{
float a;


经验不足还是不行啊!

hfjydq 发表于 2014-8-15 08:49:36

yidian16 发表于 2010-6-21 13:21
**** 作者被禁止或删除 内容自动屏蔽 ****

牛逼   这个共用体的使用真牛逼

tigerman520 发表于 2014-8-15 08:57:18

yidian16 发表于 2010-6-21 13:21
**** 作者被禁止或删除 内容自动屏蔽 ****

牛人,顶一个。
页: [1]
查看完整版本: IAR 中eeprom的访问(如何将一个float型的数据存入eeprom)