项目中遇到stm32不能进入中断处理函数,而是陷入startup文件中默认处理函数的问题,例如
PUBWEAK SDIO_IRQHandler
SECTION .text:CODE:REORDER(1)
SDIO_IRQHandler
B SDIO_IRQHandler
文件中实际写了
void SDIO_IRQHandler()
{
SD_ProcessIRQSrc();
}
也就是说编译时无法连接到自定义的函数,最后在amobbs的一个帖子中得到解决方案,作者tomhe666
根本原因是因为使用了Embedded C++编译器,由于C++特性导致asm写的默认函数没有被覆盖掉,只要用C的编译器编译该函数即可
#ifdef __cplusplus
extern "C" {
void SDIO_IRQHandler(){}
}
#endif
为了避免以后陷入同样问题,战胜懒癌,作此记录。