找不到.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的主要内容,如果未能解决你的问题,请参考以下文章

cpp文件找不到,求高手

client.cpp文件怎么找不到了?

Eclipse 中的通用代码片段或模板

qtcreator头文件中的结构体找不到

gcc编译文件时找不到指定函数怎么办

macdeployqt源的位置