OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8492|回复: 14

把一个浮点数存到EEPROM中,然后取出来使用这个浮点数

[复制链接]

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
发表于 2015-12-18 10:26:16 | 显示全部楼层 |阅读模式
5金钱
大家好,我用的是IAR的编译器,单片机是STM8L,我想把一个浮点数存到EEPROM中,然后取出来使用这个浮点数,不知是怎么操作,
   用联合体,指针两种方式是怎么实现的
   求指教!


最佳答案

查看完整内容[请看2#楼]

强制类型转换。 比如你从EEROM读出来的是字节数组型式的 u8 buf[100]; 定一个指针 u8 *p=NULL; float a,b,c,d ..... p=buf; a=*((float *)(p+4*0)); b=*((float *)(p+4*1)); c=*((float *)(p+4*2)); d=*((float *)(p+4*3)); .... 以上是从EEROM读出来的处理
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2015-12-18 10:26:17 | 显示全部楼层
强制类型转换。
比如你从EEROM读出来的是字节数组型式的
u8 buf[100];
定一个指针 u8 *p=NULL;
float a,b,c,d .....
p=buf;
a=*((float *)(p+4*0));
b=*((float *)(p+4*1));
c=*((float *)(p+4*2));
d=*((float *)(p+4*3));
....

以上是从EEROM读出来的处理
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-11-6
在线时间
6 小时
发表于 2015-12-18 10:26:17 | 显示全部楼层
用联合体
union _exch
{
char data[4];
flaot  result;
}test;
tese.result=浮点数;
然后把data[0],data[1],data[2],data[3],存入epprom
读出来时把数据一次放入data[0],data[1],data[2],data[3],  然后   k=tese.result;k就是需要的浮点数了
这个方法涉及到浮点数在内存里面的存储方式,楼主可以看一下
http://wenku.baidu.com/link?url=t1OWEXAdWxB4TCAJrZ5n6A19IjC8TQJSmvUaowlMMFSGeXf9pPyIeHSvM4rBSTC12G4T5hWut8YhBcLg9O62mw920LMrABMdmpGnItZ2H5S
回复

使用道具 举报

233

主题

961

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1815
金钱
1815
注册时间
2011-10-9
在线时间
230 小时
发表于 2015-12-18 10:30:45 | 显示全部楼层
强奸法  浮点数*10000 存到eprom  取出来除10000
回复

使用道具 举报

0

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
233
金钱
233
注册时间
2014-6-5
在线时间
37 小时
发表于 2015-12-18 10:32:26 | 显示全部楼层
一个浮点使用4个字节表示。 查询一下相关的转换方法,再把4个字节存到你指定的位置,用的时候读出来组合成浮点数即可。  不过这个比较繁琐,你可以把浮点的整数部分和小数部分分开存储,这样处理的对象就是整数了,用的时候再合并成浮点。  浮点数据的处理要注意一个精度的问题。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2015-12-18 13:40:39 | 显示全部楼层
uint8_t buf[60];
    uint8_t *p,*p1;
    p = buf;
   float a=1.1,b=3.2,c=5.847,d=100.54 ..... 
 p1=(uint8_t*)(&a);
*p++=*p1++;
*p++=*p1++;
*p++=*p1++;
*p++=*p1;

                p1=(uint8_t*)(&b);
*p++=*p1++;
*p++=*p1++;
*p++=*p1++;
*p++=*p1;

 p1=(uint8_t*)(&c);
*p++=*p1++;
*p++=*p1++;
*p++=*p1++;
*p++=*p1;

 p1=(uint8_t*)(&d);
*p++=*p1++;
*p++=*p1++;
*p++=*p1++;
*p++=*p1;

以上是要存EEROM时的处理,把buf存进EEROM就可以了。
回复

使用道具 举报

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
 楼主| 发表于 2015-12-18 16:42:10 | 显示全部楼层
回复【2楼】simms01:
---------------------------------
会溢出
回复

使用道具 举报

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
 楼主| 发表于 2015-12-18 16:47:42 | 显示全部楼层
回复【5楼】augustedward:
---------------------------------我得好好研究研究指针了!
回复

使用道具 举报

6

主题

41

帖子

0

精华

高级会员

Rank: 4

积分
821
金钱
821
注册时间
2012-3-31
在线时间
177 小时
发表于 2015-12-18 18:54:23 | 显示全部楼层
把浮点数转换成字符串,存进去,取出来再把字符串转换成浮点数。
饭量有限,技术无线。
电子开发,时间充裕。
QQ:58692647
回复

使用道具 举报

13

主题

29

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
223
金钱
223
注册时间
2015-9-15
在线时间
36 小时
 楼主| 发表于 2015-12-21 09:24:56 | 显示全部楼层
回复【9楼】sclsdhlr:
---------------------------------
tese.result=浮点数; 这条指令就把浮点数存入了data[4]吗
回复

使用道具 举报

11

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2015-11-2
在线时间
17 小时
发表于 2015-12-21 11:38:28 | 显示全部楼层
顶 8L。。。
回复

使用道具 举报

2

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2015-11-6
在线时间
6 小时
发表于 2015-12-28 17:17:33 | 显示全部楼层
小鱼人 发表于 2015-12-21 09:24
回复【9楼】sclsdhlr:
---------------------------------
tese.result=浮点数; 这条指令就把浮点数 ...

是的,共用体里面的两种数据类型公用一段空间,但是同时只有一种类型有效
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5265
金钱
5265
注册时间
2012-8-25
在线时间
1025 小时
发表于 2015-12-28 17:28:23 | 显示全部楼层
没有那么麻烦,直接用char指针读写就好了,
float a
eep_write(addr,(char *)&a,4);
eep_read(addr,(char *)&a,4);
回复

使用道具 举报

1

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2013-10-8
在线时间
24 小时
发表于 2015-12-28 22:25:04 | 显示全部楼层
感觉3l的联合体比较好
回复

使用道具 举报

1

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2013-10-8
在线时间
24 小时
发表于 2015-12-28 22:28:46 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 18:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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