
难度:★★本文首发于我的嵌入式技术号「OneChan讲Soc嵌入式」,未经授权禁止转载。前面我们讲了+FIRST和+LAST——它们分别把段固定在执行域的最开头和最末尾。但有一种需求,是+FIRST和+LAST都满足不了的:“我要把一个特定的函数,放在一个特定的绝对地址上。不是开头,不是末尾,就是 0x08004000 这个位置。谁也别动它。”这就是FIXED。FUNC_TABLE 0x08004000 FIXED 0x00000100 { bootloader.o (JumpTable) }FIXED的意思是:把这个执行域固定在一个不可更改的绝对地址上。今天这篇文章,就来拆开FIXED的真正用途。它最常见的场景,是 Bootloader 和 App 之间那个绝对不能出错的约定——跳转表。一、先看场景:Bootloader 怎么跳转到 App?一个典型的 Cortex-M3 固件分为两部分:Bootloader:放在 Flash 开头(