LibOpenCM3 向量 table 都是阻塞处理程序

LibOpenCM3 vector table is all blocking-handler

这个问题的答案在这里

很好地解释了整个机制,但我得到的是 整个向量 table 充满了阻塞处理程序 .

我知道是因为我在调试器中看到了它(除了整个东西不工作):disassembly screenshot showing vector table.

就好像链接器只是忽略了我精心定义的中断处理函数,例如:

void sys_tick_handler(void)
{
...
}

void tim1_up_isr(void)
{
...
}

我正在使用 EmBitz IDE 并按照本教程 here 使 libopencm3 正常工作(除此问题外它确实有效)。

我检查了 n 次函数名称,并尝试了几个在线示例,包括来自 libopencm3-examples 项目的示例。

一切都顺利编译并加载到目标板 (STM32F103C8) 并运行良好 - 除了没有 ISR 被调用(我确实得到中断但它们卡在阻塞处理程序中)。

有人知道为什么会这样吗?

它看起来像与标准向量 table 链接(来自 ST 的 SPL 或 HAL)。

要检查这一点,请尝试将您的 sys_tick_handler() 重命名为 SysTick_Handler(),然后 tim1_up_isr()TIM1_UP_IRQHandler().

如果有效,请找到包含此 SysTick_HandlerTIM1_UP_IRQHandler 的文件(我想应该是 startup*.s)并将其从您的项目中删除。