对于嵌入式设备,我有一个文件,其中包含一个带有存储中断处理程序的函数指针的数组,像这样定义(我不能修改它):
typedef void (*const ISRFunction)(void);
__attribute__((weak)) void ISR0(void){ for(;;); }
__attribute__((weak)) void ISR1(void){ for(;;); }
...
__attribute__((weak)) void ISR78(void){ for(;;); }
...
ISRFunction __vector_table[0x79] =
{
(ISRFunction)&ISR0,
(ISRFunction)&ISR1,
...
(ISRFunction)&ISR78,
...
}
我有第二个文件,它定义了一些我无法修改的功能。这个文件就像:
void blinkLed(void)
{ ... }
最后,我有一个主源文件,包含main
设备的功能和配置。在中断 78 上,我想闪烁 LED。所以我写了一个这样的强大函数ISR78
:
void ISR78(void)
{
blinkLed();
}
我想知道是否有解决方案ISR78
直接覆盖弱函数blinkLed
,即存储blinkLed
内部地址__vector_table
而不修改它或重命名函数?
编辑:
我实际上使用 GNU gcc 4.9.3 和相关的链接器(GNU ld 2.24.0)。我可以修改main.c
与项目关联的 Makefile。