Cortex-M3:为什么地址计数器 . 可以从加载域复制到执行域? 难度:★★★本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。在前面的文章里,我们反复提到一个概念:.data段的初始值存在 Flash(加载域),运行时在 RAM(执行域)里读写。启动代码负责把初始值从 Flash 搬到 RAM。但启动代码怎么知道“从哪搬到哪”?它依赖三个地址:LDR R1, =__data_load ; Flash 中的起始地址 LDR R2, =__data_start ; RAM 中的起始地址 LDR R3, =__data_end ; RAM 中的结束地址这三个标号的值,是链接器在链接时填进去的。而链接器之所以能算出这些值,靠的是分散加载文件(.sct)里一个看似不起眼的机制——地址计数器.在加载域和执行域之间的“接力”。今天这篇文章,就来拆开这个机制。它牵出了链接器内部一个最精巧的设计:Image$$符号。一、两个“.”:加载域地址计数器和执行域地址计数器链接器在处理.sct文件时,内部维护着两个不同的地址计数器。