三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

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

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,只读

← 返回列表