OpenEdv-开源电子网

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

flash模拟eeprom存储小数要怎么改官方例程阿

[复制链接]

0

主题

1

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2021-2-26
在线时间
4 小时
发表于 2021-2-26 11:46:04 | 显示全部楼层 |阅读模式
1金钱
官方例程里是存储了字符串,但我想存储123.123这样的小数数据该怎么修改例程阿?求助 屏幕截图 2021-02-26 114315.png



屏幕截图 2021-02-26 114315.png

最佳答案

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

#include "stdlib.h" #include "stdio.h" #include "inttypes.h" int main(void) { float f1 = 1.23456; uint32_t i = (int)(*(int *)&f1); float* f2 = (float*)(&i); printf("%f\r\n", *f2); }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

18

主题

112

帖子

1

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2013-11-28
在线时间
51 小时
发表于 2021-2-26 11:46:05 | 显示全部楼层

#include "stdlib.h"
#include "stdio.h"
#include "inttypes.h"

int main(void)
{
    float f1 = 1.23456;
    uint32_t i = (int)(*(int *)&f1);

    float* f2 = (float*)(&i);
    printf("%f\r\n", *f2);

}
学习只为了路程走得更远....!
回复

使用道具 举报

34

主题

252

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
473
金钱
473
注册时间
2020-5-11
在线时间
217 小时
发表于 2021-2-26 15:45:52 | 显示全部楼层
实际项目中一般扩大多少倍进行存储,或者转换成字符串存储,一般是不直接存储小数的,小数的计算量大
回复

使用道具 举报

5

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2020-11-24
在线时间
33 小时
发表于 2021-2-26 15:59:37 | 显示全部楼层
你说的小数其实是浮点数,包括float和double。底层本质上也是二进制数据,就看有几个字节而已。做一下强制类型转换即可
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-2-27 01:04:12 | 显示全部楼层
灵活使用指针和强制转换,就很容易处理了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

18

主题

112

帖子

1

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2013-11-28
在线时间
51 小时
发表于 2021-2-27 01:39:26 | 显示全部楼层
存整数会吗?
float f1 = 123.456;
int i = (int)(*(int *)&f1);
学习只为了路程走得更远....!
回复

使用道具 举报

18

主题

112

帖子

1

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2013-11-28
在线时间
51 小时
发表于 2021-2-27 01:41:33 | 显示全部楼层
存整数会吗?
float f1 = 123.456;
int i = (int)(*(int *)&f1);
学习只为了路程走得更远....!
回复

使用道具 举报

80

主题

931

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3348
金钱
3348
注册时间
2013-5-28
在线时间
468 小时
发表于 2021-2-27 08:17:56 | 显示全部楼层
用指针把它当整型数强奸了就是了
回复

使用道具 举报

41

主题

278

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2357
金钱
2357
注册时间
2019-10-29
在线时间
380 小时
发表于 2021-2-27 11:14:10 | 显示全部楼层
本帖最后由 chenyuan 于 2021-2-27 11:18 编辑

可以分两步存放,如123.45;分为整数和小数分开存放,存放时整数123存放到flash1中,小数0.45*100,变成45存放到flash2中,这样的话可以保证存进去的和取出来的是同一个值,不会有误差,就是你自己在存放和取出时要进行处理,也可以直接123.45*100之后再存放进去;但是存小数进去的话,反而给芯片更大的计算量,并且存放的空间可能也更大;
https://blog.csdn.net/qq_3472081 ... LearnPai2-2.control
看了下这个,感觉是挺麻烦的,没看太懂
回复

使用道具 举报

41

主题

278

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2357
金钱
2357
注册时间
2019-10-29
在线时间
380 小时
发表于 2021-2-27 11:17:08 | 显示全部楼层
techxuan 发表于 2021-2-27 01:41
存整数会吗?
float f1 = 123.456;
int i = (int)(*(int *)&f1);

按照大哥这个试了下,现象不太对,是不用 %d 打印吗,那要如何打印验证呢??
1.png
回复

使用道具 举报

18

主题

112

帖子

1

精华

高级会员

Rank: 4

积分
579
金钱
579
注册时间
2013-11-28
在线时间
51 小时
发表于 2021-3-13 03:11:09 | 显示全部楼层
2021-03-13 11-10-28屏幕截图.png
学习只为了路程走得更远....!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 21:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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