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_Handler
和 TIM1_UP_IRQHandler
的文件(我想应该是 startup*.s
)并将其从您的项目中删除。
这个问题的答案在这里
很好地解释了整个机制,但我得到的是 整个向量 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_Handler
和 TIM1_UP_IRQHandler
的文件(我想应该是 startup*.s
)并将其从您的项目中删除。