难度:★★ 本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
前几篇文章我们反复提到,.sct 文件里到处是 ALIGN:
LR_IROM1 0x08000000 0x00080000 {
ER_IROM1 0x08000000 0x00080000 {
*.o (RESET, +First)
*.o (+RO)
}
RW_IRAM1 0x20000000 0x00010000 {
*.o (+RW)
*.o (+ZI)
.ANY (+RW +ZI)
}
}
你可能会想:汇编里已经有 ALIGN 了,为什么分散加载文件里还要再写一遍?链接器不能自己搞定对齐吗?
答案是:能搞定一部分,但搞不定全部。而且,如果你在该写 ALIGN 的地方没写,链接器不会报错——它只会在运行时给你一个随机触发的 HardFault。
今天这篇文章,就来拆开分散加载文件里 ALIGN 的三重作用,以及它在 Cortex-M3 上最容易被忽视的一个硬性要求。
一、分散加载中的 ALIGN 和汇编中的 ALIGN 有什么区别?
汇编中的 ALIGN:作用于当前 AR



