Arm 重新映射中断向量和引导块

Arm 重新映射中断向量和引导块,arm,remap,lpc,Arm,Remap,Lpc,我无法理解重新映射中断向量或引导块的概念。重新映射向量表有什么用?它在使用重新映射和不使用重新映射时是如何工作的?有关于这个的好文章的链接吗?我在谷歌上搜索了一下,但没有找到好的答案。将RAM映射到0x0000并将0x0000中存在的任何内容映射到其他地方有什么好处?如果从0x0000执行,是否执行速度更快?这是一个简单的实用性问题。重置向量为0x0*,当系统首次通电时,内核将开始从那里获取指令。因此,您必须在通电后立即获得一些代码——它必须是某种类型的ROM,因为RAM在这一点上是未初始化的。

我无法理解重新映射中断向量或引导块的概念。重新映射向量表有什么用?它在使用重新映射和不使用重新映射时是如何工作的?有关于这个的好文章的链接吗?我在谷歌上搜索了一下,但没有找到好的答案。将RAM映射到0x0000并将0x0000中存在的任何内容映射到其他地方有什么好处?如果从0x0000执行,是否执行速度更快?

这是一个简单的实用性问题。重置向量为0x0*,当系统首次通电时,内核将开始从那里获取指令。因此,您必须在通电后立即获得一些代码——它必须是某种类型的ROM,因为RAM在这一点上是未初始化的。现在,一旦您完成了初始引导过程并正确启动了应用程序,您就会遇到一个问题—您的异常向量和处理它们的代码都在ROM中!如果您想安装不同的中断处理程序,该怎么办?如果要切换热重置处理程序的重置向量,该怎么办?通过使向量区域可重新映射,应用程序可以自由地为安装了自己的向量和处理程序代码的RAM区域关闭ROM引导固件

当然,这可能并不总是必要的——例如,对于运行单一专用应用程序的微控制器来说,它可以自行处理通电问题——但一旦进入更复杂的领域,即独立的引导加载程序和应用程序代码,它就变得更为重要。性能也是一个理论问题,至少-如果你有慢闪存但快RAM,你可能会受益于将向量和中断处理程序复制到RAM中-但我认为这在现代微型计算机上远不是一个问题

此外,如果应用程序希望能够在运行时更新引导闪存,那么它绝对需要一种将向量和处理程序放在别处的方法。否则,如果在闪存块处于编程模式时触发中断,则由于无法读取向量,设备将锁定在递归硬故障中,永远无法完成编程操作并自行修复

虽然大多数类型的ARM内核都有一些方法可以实现,但有些(如Cortex-M0)就没有,更不用说很多非ARM内核了,这就需要这种非体系结构特定的系统级重新映射功能来实现相同的结果。对于围绕ARM7TDMI等旧内核构建的微控制器,在固定替代“高矢量”地址(更适合与MMU一起使用)后面也很可能没有RAM,这使得该选项毫无用处


*是的,好的,0x4如果我们说的是Cortex-M,但你知道我的意思…;)

可能重复的任何链接,以了解更多?无法完全理解启动过程。我想首先我需要了解引导过程,看看在嵌入式系统中什么是从RAM执行的,什么是从ROM执行的。