我把项目从C转成C++后,程序好像卡在了中断函数中。
我用C写过一个keil嵌入式项目,然后我尝试用C++写。然后我发现程序卡在了中断函数中,即使我正确地编写了 IRQHandler 函数(它们在 C 项目中工作)。 USART1 将卡住,而 CAN 接收/发送仍在工作。
// this is the USART_IRQHandler
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
最佳答案
如果使用 C++ 编译,中断处理程序需要 C 链接:
extern "C" void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
}
}
如果没有 C 链接,函数 USART1_IRQHandler
将不会替换同名的默认处理程序,但使用 C 链接是一个无限循环,因此它似乎“卡在中断中function”,它是……只是一个不同的中断函数。
C 链接可防止 C++“名称改组”,否则会导致符号与中断处理程序弱链接符号名称不同。
关于c++ - Keil5 C工程转C++工程报错用中断函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54217269/