用中断函数将Keil5C项目转换为C++项目错误

Transform Keil5 C Project to C++ Project Error with the Interrupt Function

本文关键字:项目 转换 C++ 错误 Keil5C 中断 函数      更新时间:2023-10-16

在我将Project从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链接,这是一个无休止的循环,因此它看起来">卡在中断函数中",这……只是一个不同的中断函数。

C链接防止C++"名称篡改",否则会导致符号与中断处理程序弱链接符号名称不同。