找不到.cpp文件中的ISR
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了找不到.cpp文件中的ISR相关的知识,希望对你有一定的参考价值。
我有一个嵌入式项目,包含c文件(来自SDK的驱动程序)和c ++(。cpp)文件(我自己的代码)。我正在尝试设置中断服务程序。我发现如果ISR在.c文件中,它可以正常工作。但是,移入.cpp文件的完全相同的功能不起作用。
在MK64F12_Vector.s;
_vectors:
...
.word PORTD_MyIRQHandler
一些相关的初始化代码,在启动时调用一次;
CLOCK_EnableClock(kCLOCK_PortD);
EnableIRQ(PORTD_IRQn);
PORT_SetPinInterruptConfig(PORTD, 0, kPORT_InterruptFallingEdge);
在.c文件中;
void PORTD_MyIRQHandler()
{
while (1) ; // put breakpoint here
}
如果PORTD_MyIRQHandler()在.c文件中,则上述工作正常。但是,如果我将它移动到.cpp文件(我想要它!),我会得到以下错误。注意我只是在不改变任何东西的情况下复制和粘贴它。
(.vectors + 0x138):对'PORTD_MyIRQHandler'的未定义引用
为了让它发挥作用,我还需要做些什么吗?也许是编译器或链接器选项?我试过以下但没有成功;
__attribute__((interrupt)) void PORTD_MyIRQHandler() {..}
#pragma interrupt
void PORTD_MyIRQHandler() {..}
我正在使用带有gcc的Segger Embedded Studio。
答案
尝试
extern "C" void PORTD_MyIRQHandler(){
}
C ++在函数名称中添加了字符,这些字符取决于函数的输入和返回值类型。
存在类型名称修改的此功能,以避免将函数与错误类型的参数链接并允许函数重载。使用extern“C”禁用它。
以上是关于找不到.cpp文件中的ISR的主要内容,如果未能解决你的问题,请参考以下文章