如题,在使用C++来编译单片机的时候,发现中断函数进入不了中断发生一直死在startup中,查看map文件发现,根本没有中断函数的接口。
查询原因如下,
C++编译器会对函数名进行修改,以符合重载。
原定义函数:int Func ( int , char * )
C++编译后:int Func_i_cp ( int, char* )
所以中断就找不到入口函数了。
解决办法:
在头文件中,使用extern C 命令来指定编译器使用C来编译下面代码。
示例如下:
adc.c 中
void adc_IRQHander(void)
{
...
}
adc.h 中
#program once
void adc_init(void);
#ifdef __cplusplus
extern "C" {
#endif
void adc_IRQHander(void)
#ifdef __cplusplus
}
#endif
这里在头文件中,检查如果C++开发就使用强制C编译中断入口函数。