在.cpp文件中找不到 ISR

ISR in .cpp file not found

本文关键字:找不到 ISR 文件 cpp      更新时间:2023-10-16

我有一个嵌入式项目,其中包含c文件(来自SDK的驱动程序(和c ++(.cpp(文件(我自己的代码(。我正在尝试设置中断服务例程。我发现如果 ISR 在 .c 文件中,它可以正常工作。但是,移动到.cpp文件中的完全相同的功能不起作用。

在MK64F12_Vector;

_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() {..}

我正在使用 Segger Embedded Studio 和 gcc。

试试

extern "C" void PORTD_MyIRQHandler(){
}

C++ 将字符添加到函数名称中,具体取决于函数的输入和返回值类型。

此功能(类型名称重整(的存在是为了避免使用错误类型的参数链接函数并允许函数重载。使用外部"C"可以禁用它。