找不到 .cpp 文件中的 ISR
ISR in .cpp file not found
我有一个嵌入式项目,其中包含 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): undefined reference to `PORTD_MyIRQHandler'
我还需要做些什么才能让它工作吗?也许是编译器或链接器选项?我尝试了以下但没有成功;
__attribute__((interrupt)) void PORTD_MyIRQHandler() {..}
#pragma interrupt
void PORTD_MyIRQHandler() {..}
我正在使用带有 gcc 的 Segger Embedded Studio。
尝试
extern "C" void PORTD_MyIRQHandler(){
}
C++ 根据函数的输入和 return 值类型向函数名称添加字符。
此功能(类型名称修改)的存在是为了避免使用错误类型的参数链接函数并允许函数重载。使用 extern "C" 禁用它。
我有一个嵌入式项目,其中包含 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): undefined reference to `PORTD_MyIRQHandler'
我还需要做些什么才能让它工作吗?也许是编译器或链接器选项?我尝试了以下但没有成功;
__attribute__((interrupt)) void PORTD_MyIRQHandler() {..}
#pragma interrupt
void PORTD_MyIRQHandler() {..}
我正在使用带有 gcc 的 Segger Embedded Studio。
尝试
extern "C" void PORTD_MyIRQHandler(){
}
C++ 根据函数的输入和 return 值类型向函数名称添加字符。
此功能(类型名称修改)的存在是为了避免使用错误类型的参数链接函数并允许函数重载。使用 extern "C" 禁用它。