在 Eclipse IDE 上将矢量偏移 table 与 MBED 库一起使用

Using Vector Offset table with MBED library on Eclipse IDE

我是一名刚毕业的电子工程师,我在新工作中的首要任务之一是将代码导入 Mbed 编译器。 我正在尝试 运行 在我的带有 LPC1769 芯片的自定义硬件上使用 Mbed Blinky 示例。我已将 Blinky 应用程序从在线 MBED 编译器导出到 GNU Eclipse,并将其导入到 IDE.

当我设置适当的 LED 引脚(将 PinNames.h 中的 LED1 从 1.10 更改为我的硬件的 2.13)并直接闪烁时,Mbed 闪烁代码 运行 很好。所以 MBed 和我的自定义硬件没有问题。但是,我的公司有一个自定义的引导加载程序,任何应用程序都需要使用它。自定义引导加载程序要求我从 0x4000 开始启动程序。 为此,我的公司之前将这一行添加到他们的代码中,刷新引导加载程序并使用自定义固件加载程序将 IDE 的输出 .bin 文件上传到电路板。

    SCB->VTOR = (0x4000) & 0x1FFFFF80;

当我尝试遵循相同的步骤时,编译器构建时没有任何抱怨,但当我将程序上传到我的引导加载程序时,我没有看到任何闪烁。

我怀疑我必须对内置 CMSIS 库进行一些更改,and/or startup_LPC17XX.o 和 system_LPC17xx.o 文件随 MBED 导出一起提供,但我'我很困惑。任何帮助将非常感激。 另外,我正在使用自动构建的 make 文件,以防万一。

最重要的是,您需要调整链接描述文件中的代码位置,例如:

MEMORY {
    FLASH   : ORIGIN = 0x4000,  LENGTH = 0x7C000
}

检查启动代码和链接描述文件以获取闪存中的任何其他绝对地址。

如果引导加载程序尚未执行此操作,则中断需要调整 VTOR& 操作看起来很奇怪;简单地写 0x4000 应该就足够了,或者更好的是,像这样:

SCB->VTOR = (uint32_t) &_IsrVector;

假设您已在链接描述文件或启动代码中定义 _IsrVector 以引用向量中的第一个字节 table,即初始堆栈指针的定义。这样,如果链接描述文件中的内存布局发生更改,您就不必调整代码,并且可以避免幻数。