ARM固件小白入门:RO、RW、ZI到底是什么?

发布时间:2026/6/26 15:30:48
ARM固件小白入门:RO、RW、ZI到底是什么? ARM固件小白入门RO、RW、ZI到底是什么每次Keil编译完都会看到这几个东西Code: 50480 RO-data: 8280 RW-data: 456 ZI-data: 12340RO、RW、ZI到底是什么意思用大白话讲清楚。一、两个仓库嵌入式芯片有两种存储Flash— 像书柜。断电后内容还在但读写慢。RAM— 像白板。断电就擦干净了但读写快。程序运行的时候代码和数据分别放在这两个地方。二、RO — 只读数据RO 就是Read-Only只读的意思。包括你的代码和常量比如const int max 100;这些东西上电后就放在 Flash 里CPU 直接读。只占 Flash不占 RAM。三、RW — 有初值的变量RW 就是Read-Write可读可写。比如这种给了初始值的全局变量int score 0;Flash 里存一个模板score 的初值是 0。上电的时候把这个模板抄到 RAM 里去。之后程序在 RAM 里改 score 99。Flash 和 RAM 都占。四、ZI — 没初值的变量ZI 就是Zero-Initialized初始化为零。比如这种没给初始值的全局变量int temp;Flash 里只记一条给 temp 留个位置。上电的时候在 RAM 里圈一块地全部写成 0。只占 RAM不占 Flash。五、上电启动流程芯片上电 │ ▼ 1. 把 RW 的初值从 Flash 拷贝到 RAM 2. 把 ZI 的区域在 RAM 里全部清零 │ ▼ 3. 跳转到 main() 开始执行你的代码六、怎么算空间Flash 占用 RO RW RAM 占用 RW ZI举个例子STM32F4071MB Flash192KB RAMRO 200KBRW 10KBZI 50KBFlash 用了 200 10 210KB还剩很多RAM 用了 10 50 60KB也够七、总结段什么意思举个例子占 Flash占 RAMRO只读代码、const 常量占不占RW有初值的变量int x 5占占ZI没初值的变量int y不占占记住两句话RW 是 Flash 和 RAM 都占的最费资源。RAM 不够先查 ZIFlash 不够先查 RO。有问题欢迎评论区交流。