使用链接器指令/宏或任何其他技巧重新定义弱IRQ处理程序

时间:2015-02-18 23:23:56

标签: c linker arm microcontroller

环境 - KEIL ARMcc v5.05编译器,LPC1769的ARMlink v5.05链接器

我也在其他一些论坛上问过这个问题,如果这看起来很熟悉的话。 我想创建一个可以重复使用相同或类似的基础项目 处理器。我正在尝试创建可以由宏定义/声明的中断处理程序,并且可以覆盖默认的弱定义。

有关。例如,我想写DBG端口处理程序,但我想要下一个人 只需更改头文件中的宏即可选择他想要的UART。

/ *以下宏将创建文本void UART0_IRQhandler * /

#define DBG_UART UART0 #define MAKE_IRQH(x) void x##_IRQHandler(void) #define IRQH(x) MAKE_IRQH(x)

所以在我的dbg.c文件中我写了

IRQH(DBG_UART){
/*....... UART handling stuff ....*/ 
}

我的意图是,下一个人可以接受这个项目而只是改变说法 UART0到UART1并且不需要更改dbg.c文件。

上面的东西不起作用,我的代码仍然会遇到默认的弱处理程序 虽然void UART0_IRQhandler尚未定义。 你们有没有看到其他方法来实现这个目标?

2 个答案:

答案 0 :(得分:1)

我在不同的地方使用相同的UART,我的错误。它现在有效。

答案 1 :(得分:0)

在设计宏时,您可能希望查看预处理器输出,例如与gcc -E

然后你可以发现错误:

#define IRQH() MAKE_IRQH(x)

实际上是: #define IRQH(x) MAKE_IRQH(x)