Cortex-M3:为什么执行域要指定 +RO、+RW、+ZI 属性?

发布时间:2026/8/8 14:27:49
Cortex-M3:为什么执行域要指定 +RO、+RW、+ZI 属性? 难度:★★本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。打开.sct文件,你会看到执行域后面跟着一串属性:ER_IROM1 0x08000000 0x00080000 { *.o (RESET, +First) *.o (+RO) } RW_IRAM1 0x20000000 0x00010000 { *.o (+RW) *.o (+ZI) }+RO、+RW、+ZI——三个由加号开头的关键字。很多人扫一眼就过去了,心里默认:“RO 是只读,RW 是可读写,ZI 是零初始化,记住了。”但如果你以为这只是给人看的标签,那就错过了这三个符号背后链接器最核心的分配逻辑。它们不仅仅是“属性”,它们是链接器决定“一段数据该放进 Flash 还是 RAM”“要不要在 Flash 里存初始值”“要不要在启动时清零”的唯一依据。今天这篇文章,就把+RO、+RW、+ZI彻底拆开。理解了它们,你就理解了链接器是怎么在 Flash 和 RAM 之间划三八线的。一、+RO:只读数据,留在 Flash+RO的意思是Read Only,只读。链