大家好、
客户有问题需要您的帮助:
默认情况下、此 MCU 的异常矢量存储在地址0x0处、即闪存空间。 如果您要在跳转到应用程序时修改异常矢量、可以只擦除闪存、但由于闪存在断电后会保存、因此引导加载程序本身的矢量表将被销毁。
是否有更好的方法重定向异常矢量并 在加电之后保持引导加载程序本身的异常矢量的完整性?
谢谢。此致、
本
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
客户有问题需要您的帮助:
默认情况下、此 MCU 的异常矢量存储在地址0x0处、即闪存空间。 如果您要在跳转到应用程序时修改异常矢量、可以只擦除闪存、但由于闪存在断电后会保存、因此引导加载程序本身的矢量表将被销毁。
是否有更好的方法重定向异常矢量并 在加电之后保持引导加载程序本身的异常矢量的完整性?
谢谢。此致、
本
尊敬的 Ben:
通常会有两个异常向量表、一个用于引导加载程序、另一个用于应用程序。
例如:
这是用于 ARM 内核的引导加载程序

下面是应用链接器脚本:

您可以看到、引导加载程序异常矢量表将从0x0到0x20、其中应用程序异常矢量表将从 0x00200020到0x00200040 。
控制器上电复位后、首先它将从引导加载程序异常矢量表中存在的"resetEntry"开始执行。

因此、它将在 _c_int00中执行与引导加载程序相关的所有初始化、然后它将调用引导加载程序的 main 函数。
同样、在引导加载程序的 main 函数中、它将更新 并执行应用程序调用、或者根据要求直接调用应用程序。 在执行应用程序调用时、引导加载程序将调用 本例中位于0x00200020的应用程序矢量表。

一旦调用应用矢量表、现在将从 应用异常矢量表的复位入口开始执行、如下所示:

因此、现在所有与应用程序相关的初始化都将发生在 _c_int00函 数中、然后会调用并执行应用程序的主函数。

我希望这能够澄清您与引导加载程序和应用程序中处理的异常矢量表相关的所有疑问。
--
谢谢。此致、
Jagadish。