我过去使用过多个 Cortex M 部件,主要使用 IAR 作为我的 IDE。我目前正在使用基于 Eclipse 的 IDE(Infineon ModusToolbox)为 Cortex M0+ 部件开发一个项目。
我想将我的应用程序放在 FLASH 中 0x00 以外的地址处(最终我会在 0x00 处有一个引导加载程序)。我修改了链接器脚本以反映这一点。但是,当尝试通过 SWD 在 0x00 以外的地址进行调试时,它无法调试。重置向量按预期映射到我的新 FLASH 地址(根据映射文件)。
制造商表示,使用 ARM 核心设备无法从 0x00 以外的地址开始调试,但我 99% 肯定,我过去做过我现在正在尝试的事情。我记错了吗?程序计数器不是总是最初设置为复位向量的地址吗?还是需要一些额外的调试器指令?
绝对有可能在 Cortex-M0+ 上调试不从地址 0x0 开始的应用程序。
您需要确保您的应用程序
VTOR
在初始化代码的早期阶段、在启用任何中断之前将 CPU 的寄存器设置为指向您的向量表。您还需要确保您的链接脚本指定了程序的入口点,通常类似于:
当然,这样的代码只有在调试器启动时才会运行。如果你只是重置 CPU 而没有连接调试器,它将无法运行。
我已经做过很多次了,这确实是可能的。
我已经移动了应用程序的 .text 区域的起始处并使用了真正的引导加载程序。
您可以从调试器重复这些操作,但我更喜欢每次都刷新真正的引导加载程序。
以下是可以在我的硬件上运行的代码:
奖励:你可以将 2 个 elf 文件提供给 gdb,这样就可以同时调试引导加载程序和应用程序,但可能会出现名称冲突,所以我只用它来调试某些东西,而另一部分是一个存根。