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

日记详情

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

Cortex-M3:为什么 +FIRST 必须用在向量表上?

Cortex-M3:为什么 +FIRST 必须用在向量表上?

难度:★★
本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。


打开任何一个 Cortex-M3 工程的分散加载文件,你一定会看到这一行:

*.o (RESET, +First)

+First是什么意思?字面上看,是“放在最前面”。

但“最前面”是哪个前面?为什么向量表必须抢这个第一?如果我不写+First,把向量表放在第二个位置会怎样?

今天这篇文章,就来拆开+First背后的硬件强制机制。它的答案,比“放在最前面”这五个字要深得多。


一、+First 在分散加载文件里的语法含义

ARM 链接器对+First的官方定义是:

将该匹配的段放在当前执行域的第一个位置,且该段的起始地址等于执行域的基地址。

换句话说,+First强制链接器做两件事:

  1. 把这个段放在当前执行域的最开头。
  2. 确保这个段的起始地址 = 执行域的起始地址。

如果有多个目标文件都有RESET段,且都写了+First,链接器只认

← 返回列表