打印
[经验分享]

浮点型数据写入和读出Flash

[复制链接]
1531|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-11-1 08:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
浮点型数据写入和读出Flash
可以使用联合体的写入



2.读出



3.关于联合体中浮点型变量为何使用double定义。
因为在计算机的底层世界都是由0和1组成的,而浮点数值就是采用二进制系统表示,常见两种基本的浮点类型: float 和 double。

单精度float为32位浮点数,1位符号,8位指数和23位尾数(小数部分)
双精度double则为64位浮点数,1位符号,11位指数和52位尾数(小数部分)
float 会丢失一定精度。
同样是0.96,float和double在Keil5中的值



如果对计算结果精度要求高的项目建议使用双精度。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43476606/article/details/132490792

使用特权

评论回复
沙发
uytyu| | 2024-11-7 20:23 | 只看该作者
将浮点型变量转换为32位整型变量

使用特权

评论回复
板凳
tabmone| | 2024-11-7 20:47 | 只看该作者
Flash存储器有有限的擦写次数,通常在几千到几万次之间,过度擦写会导致存储单元损坏。

使用特权

评论回复
地板
bestwell| | 2024-11-7 21:08 | 只看该作者
擦除Flash区域:

在写入之前,必须擦除目标Flash区域。擦除操作会将Flash单元设置为全1状态。
写入字节数组:

将转换后的字节数组逐字节写入Flash区域。

使用特权

评论回复
5
uiint| | 2024-11-7 21:57 | 只看该作者
在进行强制类型转换时,数据的内存对齐方式与单片机的内存对齐方式一致。

使用特权

评论回复
6
mikewalpole| | 2024-11-7 22:17 | 只看该作者
浮点型数据(如单精度 float 和双精度 double)在计算机中的存储格式遵循 IEEE 754 标准。以单精度 float 为例,它占用 4 个字节,包括符号位、指数位和尾数位。这种格式可以表示很大范围的数值,但在存储和读取时需要特殊的处理,以确保数据的准确性。

使用特权

评论回复
7
jkl21| | 2024-11-8 08:57 | 只看该作者
浮点型数据(如float或double)需要转换为字节序列才能存储。

使用特权

评论回复
8
rosemoore| | 2024-11-8 09:47 | 只看该作者
写入操作通常是按字节进行的,确保每次写入的数据量正确。

使用特权

评论回复
9
gygp| | 2024-11-8 10:35 | 只看该作者
将读取到的字节数据复制回联合体的字节数组中,然后访问联合体的浮点成员以获得原始的浮点数值

使用特权

评论回复
10
pmp| | 2024-11-8 11:30 | 只看该作者
在擦除和写入过程中,务必检查返回的状态并进行适当的错误处理。

使用特权

评论回复
11
cashrwood| | 2024-11-8 12:21 | 只看该作者
通常涉及到对Flash的解锁、擦除和编程操作。需要注意的是,Flash的写入通常是按字或半字进行的

使用特权

评论回复
12
hearstnorman323| | 2024-11-8 13:18 | 只看该作者
定义联合体:

union {
    float f;
    uint32_t u;
} data;
将浮点型数据赋值给联合体中的浮点型变量:

data.f = 3.14159;
将联合体中的32位整型变量写入Flash:

Flash_WriteWordData(Flash_Save_Address, data.u);

使用特权

评论回复
13
averyleigh| | 2024-11-8 14:10 | 只看该作者
从Flash中读取存储的字节序列。这通常涉及到对Flash的读取操作

使用特权

评论回复
14
51xlf| | 2024-11-8 15:06 | 只看该作者
由于Flash存储器通常只能存储字节类型的数据,而浮点数在内存中是以二进制形式存在的,因此需要将浮点数转换为字节序列后再写入Flash

使用特权

评论回复
15
mikewalpole| | 2024-11-8 15:52 | 只看该作者
读取数据:从Flash中读取之前写入的32位数据。
数据转换:将读取的32位数据转换回浮点数。

使用特权

评论回复
16
kmzuaz| | 2024-11-8 16:47 | 只看该作者
由于Flash操作通常是基于字(word,比如32位)的,所以需要将浮点数转换为单片机支持的格式

使用特权

评论回复
17
maudlu| | 2024-11-8 20:07 | 只看该作者
由于 Flash 通常是以字节为单位进行读写操作,而浮点型数据不是字节对齐的格式,所以首先需要将浮点型数据转换为字节数组。可以使用联合体(union)来实现这种转换。

使用特权

评论回复
18
yeates333| | 2024-11-8 22:56 | 只看该作者
从Flash存储器中读取字节序列。

使用特权

评论回复
19
wengh2016| | 2024-11-9 12:41 | 只看该作者
将浮点型数据转换为字节数组(通常是4个字节)。
这可以通过类型转换或使用库函数来实现。

使用特权

评论回复
20
robincotton| | 2024-11-10 11:47 | 只看该作者
可以检查是否有非法的字节值,或者使用校验和来验证数据的完整性。

使用特权

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

本版积分规则

1975

主题

15764

帖子

12

粉丝