Cortex-M3:为什么 +FIRST 必须用在向量表上?
难度:★★
本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。
打开任何一个 Cortex-M3 工程的分散加载文件,你一定会看到这一行:
*.o (RESET, +First)+First是什么意思?字面上看,是“放在最前面”。
但“最前面”是哪个前面?为什么向量表必须抢这个第一?如果我不写+First,把向量表放在第二个位置会怎样?
今天这篇文章,就来拆开+First背后的硬件强制机制。它的答案,比“放在最前面”这五个字要深得多。
一、+First 在分散加载文件里的语法含义
ARM 链接器对+First的官方定义是:
将该匹配的段放在当前执行域的第一个位置,且该段的起始地址等于执行域的基地址。
换句话说,+First强制链接器做两件事:
- 把这个段放在当前执行域的最开头。
- 确保这个段的起始地址 = 执行域的起始地址。
如果有多个目标文件都有RESET段,且都写了+First,链接器只认
