打印
[应用方案]

Flash 应用的优化设计建议

[复制链接]
1900|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yutingwei|  楼主 | 2024-12-17 11:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(1) 程序区和数据区分离
避免频繁擦写程序区,可将 Flash 的特定区域划分为数据区用于频繁数据更新。
使用专门的 Flash 分区策略,提高存储寿命。
(2) 动态数据管理
对于需要频繁更新的数据(如计数值或运行日志),采用轮询存储或数据冗余机制减少对单一区域的擦写次数。
(3) 使用 Bootloader 实现安全更新
在 Flash 中保留一个独立的 Bootloader 区域,用于设备启动和程序更新。
在更新前对新程序进行校验,确保固件的完整性和可靠性。
(4) 数据加密与校验
在 Flash 中存储敏感数据时,可以对其进行加密,提升安全性。
在程序或数据更新时,通过校验和/哈希值验证数据完整性,防止写入错误。


使用特权

评论回复
沙发
kkzz| | 2025-1-7 12:43 | 只看该作者
将程序按照功能划分为不同的模块,如通信模块、控制模块、数据处理模块等,每个模块的代码存放在 Flash 的特定区域。这样做有助于提高代码的可读性和可维护性。

使用特权

评论回复
板凳
adolphcocker| | 2025-1-7 15:27 | 只看该作者
避免在堆上分配大块内存,以防止堆栈溢出。尽量使用局部变量,并在函数之间传递指针而不是复制整个数据。

使用特权

评论回复
地板
qiufengsd| | 2025-1-8 02:47 | 只看该作者
全局变量占用固定的内存空间,且容易引起代码复杂性。尽量将全局变量改为局部变量或使用静态局部变量。

使用特权

评论回复
5
febgxu| | 2025-1-9 20:37 | 只看该作者
设计一个清晰、简洁、高效且组件复用性强的代码架构,如采用精简高效的算法和代码量小的中间件。

使用特权

评论回复
6
saservice| | 2025-1-11 17:01 | 只看该作者
选择时间复杂度和空间复杂度都较低的算法。

使用特权

评论回复
7
1988020566| | 2025-1-11 17:21 | 只看该作者
在Flash中保留一个独立的Bootloader区域,用于设备启动和程序更新

使用特权

评论回复
8
backlugin| | 2025-1-11 18:04 | 只看该作者
将Flash的特定区域划分为数据区,用于频繁数据更新,以避免对程序区的频繁擦写

使用特权

评论回复
9
burgessmaggie| | 2025-1-11 18:23 | 只看该作者
对于频繁调用的小函数,可以使用内联函数来减少函数调用的开销,但要注意这可能会增加代码大小。

使用特权

评论回复
10
updownq| | 2025-1-11 18:55 | 只看该作者
由于初始化为非0的全局和静态变量会占用flash空间,可以考虑要不要对其初始化,这主要看初始化代码中会不会用到这些变量的值。

使用特权

评论回复
11
earlmax| | 2025-1-11 19:17 | 只看该作者
将Flash存储器划分为两个相同大小的区域,分别存储相同的程序内容,当一个区域出现问题时,可以切换到另一个区域。

使用特权

评论回复
12
eefas| | 2025-1-11 19:38 | 只看该作者
由于 Flash 有擦写寿命限制,要采用均衡擦写的策略。可以将 Flash 划分为多个擦写单元,轮流使用这些单元进行数据存储和更新。例如,在一个数据记录系统中,将 Flash 分为多个扇区,每次记录数据时,选择使用擦写次数较少的扇区,避免某个扇区过度擦写而损坏。

使用特权

评论回复
13
tifmill| | 2025-1-11 20:03 | 只看该作者
在需要进行多次 Flash 读写操作时,合理安排读写顺序。一般来说,先进行批量的读操作,然后再进行写操作,这样可以减少 Flash 的状态转换次数。因为 Flash 在读写状态之间转换需要一定的时间和开销。

使用特权

评论回复
14
lzmm| | 2025-1-11 20:43 | 只看该作者
如果单片机的Flash支持分页,合理规划代码和数据在Flash中的分布,以减少页面切换。

使用特权

评论回复
15
earlmax| | 2025-1-11 21:06 | 只看该作者
根据应用需求,优化数据存储格式。例如,对于需要频繁读取的数据,可以采用紧凑的数据结构来减少读取时间;对于不需要精确存储的数据,可以采用近似值或压缩算法来减小存储体积。

使用特权

评论回复
16
loutin| | 2025-1-11 21:34 | 只看该作者
在Flash中存储代码的校验和,用于启动时验证代码的完整性。

使用特权

评论回复
17
weifeng90| | 2025-1-11 21:44 | 只看该作者
MCU内部FLASH要用来频繁读写数据的话,最好是做分区管理。

使用特权

评论回复
18
ccook11| | 2025-1-11 21:57 | 只看该作者
不需要的源代码不要编译到最终执行文件中,可不要包含源代码的头文件,是否需要编译它主要看业务中会不会调用源代码向外暴露的接口。

使用特权

评论回复
19
i1mcu| | 2025-1-11 22:17 | 只看该作者
对于程序中使用的常量(如配置参数、表格数据等),应尽量存储在 Flash 中。因为 Flash 在掉电后数据不会丢失,而且读取 Flash 中的常量比从其他存储介质(如外部 EEPROM)读取更加高效。

使用特权

评论回复
20
1988020566| | 2025-1-17 09:05 | 只看该作者
对于需要频繁擦写的Flash存储器,可以采用磨损均衡技术来延长其使用寿命。通过定期更换擦写区域,使得每个区域的擦写次数相对均衡,从而避免某个区域因过度擦写而损坏。

使用特权

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

本版积分规则

49

主题

410

帖子

0

粉丝