[STM32L5] 在STM32L5中以双存储体模式将负值存储在内部闪存中

[复制链接]
594|10
 楼主| 柴库柴库 发表于 2025-6-9 03:00 | 显示全部楼层 |阅读模式
用stm32L5编写应用程序,必须在双存储体模式下将负浮点值和正浮点值存储在内部闪存中。
先把这一页闪存擦掉,然后再写。
对于正值,很好处理。但是负值有问题。
由于库只允许存储无符号整数,我将数据值乘以10,将其转换为整数,在读取数据后,我将其除以10。
问题是,如何在内部闪存中存储负值。有没有更好的有效方法,不用乘和除以浮点数的倍数。

磨砂 发表于 2025-7-2 09:01 | 显示全部楼层
STM32L5的内部闪存支持双存储体模式,允许将闪存划分为两个独立的存储区域,常用于程序更新或数据存储
晓伍 发表于 2025-7-2 10:56 | 显示全部楼层
每个存储体可以独立擦除和写入,注意写入操作必须按半字或全字对齐

八层楼 发表于 2025-7-2 13:23 | 显示全部楼层
最小擦除单位为页,通常为1KB或2KB
keaibukelian 发表于 2025-7-2 13:31 | 显示全部楼层
在写入数据前,必须先擦除目标页。擦除操作以页为单位,且擦除后所有字节变为0xFF
paotangsan 发表于 2025-7-2 13:48 | 显示全部楼层
读取的值与原始负值不符的时候可以检查补码转换是否正确,确保数据类型与存储模式匹配。
renzheshengui 发表于 2025-7-2 13:59 | 显示全部楼层
STM32L5的内部闪存容量有限,需避免频繁擦写导致寿命降低
观海 发表于 2025-7-2 15:52 | 显示全部楼层
需确保负值的二进制表示正确,且存储地址符合对齐要求
guanjiaer 发表于 2025-7-2 15:52 | 显示全部楼层
负值在内存中以补码形式存储。例如,[size=0.875]-1的16位补码为0xFFFF
heimaojingzhang 发表于 2025-7-2 20:36 | 显示全部楼层
如果使用半字存储,地址必须是偶数;如果使用全字存储,地址必须是4的倍数
wowu 发表于 2025-7-3 16:11 | 显示全部楼层
在擦除或写入过程中,建议禁用中断以避免操作冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

93

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部