我看过一些库,例如STM32 SPL,使用了这个巧妙的技巧:您只需声明一个具有特定名称的函数即可将函数添加到函数数组(在SPL情况下为中断向量表),即{ {1}}或SysTick()
。用C如何实现?
到目前为止,我能做的最好的事情是:
EXTI0_Handler()
在声明用户功能之前,我仍然需要添加//Library
void SysTickNull() {
printf("does nothing\n");
};
#define SysTick SysTickNull
//User code
#undef SysTick
void SysTick() {
printf("does something\n");
}
typedef void (*call)();
int main() {
call calls[] = { SysTick }; // interrupt table works when user code is present or when it's absent
calls[0]();
}
。但是我所看到的示例甚至没有#undef
部分,以某种方式编译器(或链接器?)知道必须使用函数的用户版本。或者,当它不存在存根函数或将NULL放入数组插槽中时。
我玩过预处理器,但也找不到任何解决方案。