打印
[C语言]

IIC存入float型数据求教

[复制链接]
1693|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
留声而过|  楼主 | 2014-6-24 21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2014-6-25 07:58 | 只看该作者
存4个字节就可以了

用强制指针转换

float f;

1: ((char*)&f)[0]
2: ((char*)&f)[1]
3...
4...
按顺序还原即可

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
留声而过 + 1 很给力!
板凳
Jack315| | 2014-6-25 08:05 | 只看该作者
假设float数据是用24位表示的,则可定义一个联合:

union
{
    float f24_var;
    uint24_t u24_var;
} Data;
运算时,用 Data.f24_var;存EEPROM时,用 Data.u24_var。

使用特权

评论回复
地板
ningling_21| | 2014-6-25 09:23 | 只看该作者
union f_to_char
{
    float f_var;
    uchar uc_var[4];
} ;

用浮点数运算,把字符型保存到EEPROM

使用特权

评论回复
5
rtgchym| | 2014-6-25 10:12 | 只看该作者
楼上的方法可行,还有一种比较简单的办法就是根据你的精度,乘以一个100或1000,转换成整形然后存储,读取的时候再还原回去

使用特权

评论回复
6
留声而过|  楼主 | 2014-6-25 20:18 | 只看该作者
ningling_21 发表于 2014-6-25 09:23
union f_to_char
{
    float f_var;

可以在详细一点吗?

使用特权

评论回复
7
ningling_21| | 2014-6-25 20:44 | 只看该作者
留声而过 发表于 2014-6-25 20:18
可以在详细一点吗?

union f_to_char
{
        float f_val;
        uchar char_val[4];
};

union f_to_char fchar1;

fchar1.f_val = 220.25;

save_eep(fchar1.char_val[0]);
save_eep(fchar1.char_val[1]);
save_eep(fchar1.char_val[2]);
save_eep(fchar1.char_val[3]);


使用特权

评论回复
评分
参与人数 1威望 +4 收起 理由
原野之狼 + 4 赞一个!
8
原野之狼| | 2014-6-26 02:28 | 只看该作者
ningling_21 发表于 2014-6-25 20:44
union f_to_char
{
        float f_val;

赞!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

52

帖子

2

粉丝