ARM Cortex M3 Bootloader,用户代码是否为正常0地址?

时间:2014-06-01 07:47:05

标签: arm bootloader cortex-m3

我一直在研究ARM M3引导加载程序,大多数人似乎都使用位于低内存中的引导加载程序代码和更高内存中的用户代码。这需要在与引导加载程序一起使用时以不同方式链接用户应用程序。这是位于引导加载程序代码上方的一些地址,位于0x00000000。我觉得这很不方便。

我想知道是否有可能有一个位于高内存中的引导加载程序但仍允许用户应用程序正常链接,因此它在低内存中从0x00000000开始?

之前我已经使用PIC引导加载程序完成了这项工作,它也具有复位和放大功能。堆栈代码为0x0000,类似于ARM M3的NVIC表。

他们在PIC上的工作方式就是说,引导加载程序位于闪存的前1k。复位向量和SP代码(0x0000)指向引导加载程序代码的起始地址。因此,引导加载程序在重置后启动。

现在,当引导程序正在下载用户代码时,它将它放入链接器认为应该进入的低内存中,唯一的例外是它不允许覆盖自己的重置和位于0x0000的SP向量。相反,它“捕获”了这些并将它们存储在高内存中的闪存中。

当引导加载程序准备好让用户代码启动时,它会检索下载过程中存储的初始重置和SP向量,并使用这些向量启动用户代码。

在下次重置时,引导加载程序将启动,它可以检查它是否应该等待新的用户程序,或者只是使用它存储的向量启动用户代码。

上述方法是否可以转换为在ARM M3上使用?

1 个答案:

答案 0 :(得分:3)

我认为表达方式与流程一致'这里适用。您正在尝试做一些ARM不打算这样做的事情,我认为您正在为自己制造不必要的问题。将应用程序置于引导加载程序之上只需要在不同的地址链接,然后将VTOR寄存器设置为该地址。