ARM 如何找到我重定位的向量 table?
How does ARM find my relocated vector table?
我正在使用 NXP Kinetis K64 ARM Cortex M4 MCU。我成功地更改了链接器配置文件,将我的向量 table 移动到地址 0x8000(而不是默认的 0x0000)。当我告诉 CodeWarrior 10.6 调试器在代码开头中断时,它按预期停在 boot.S 文件的顶部。但我突然明白了,如何 MCU/debugger 找到了代码,因为闪存从地址 0x0000 到 0x7FFF 是空的 (0xFF),而 VTOR 寄存器显示为 0x0?!
我查看了 ARM M4 内核和 NXP K64 的数据表,但他们没有回答这种情况。
这可能是由于您在 CodeWarrior 中的调试配置设置所致。在 Debugger 选项卡中,如果 Initialized program counter at 被打勾,如下所示,调试器将在重置时为 Program Counter 提供 "the top of the boot.S file"[= 的地址22=],这是程序入口点。跳过查找向量 table 的正常顺序。
如果没有调试器,您的程序将不会 运行。
可以找到有关 CodeWarrior 调试器的更多详细信息here
我正在使用 NXP Kinetis K64 ARM Cortex M4 MCU。我成功地更改了链接器配置文件,将我的向量 table 移动到地址 0x8000(而不是默认的 0x0000)。当我告诉 CodeWarrior 10.6 调试器在代码开头中断时,它按预期停在 boot.S 文件的顶部。但我突然明白了,如何 MCU/debugger 找到了代码,因为闪存从地址 0x0000 到 0x7FFF 是空的 (0xFF),而 VTOR 寄存器显示为 0x0?!
我查看了 ARM M4 内核和 NXP K64 的数据表,但他们没有回答这种情况。
这可能是由于您在 CodeWarrior 中的调试配置设置所致。在 Debugger 选项卡中,如果 Initialized program counter at 被打勾,如下所示,调试器将在重置时为 Program Counter 提供 "the top of the boot.S file"[= 的地址22=],这是程序入口点。跳过查找向量 table 的正常顺序。
如果没有调试器,您的程序将不会 运行。
可以找到有关 CodeWarrior 调试器的更多详细信息here