我正在使用C语言的微控制器。在这个具体的微,中断必须在下列方式使用#pragma
定义:#pragma inside #define
static void func();
#pragma INTERRUPT func <interrupt_address> <interrupt_category>
static void func() { /* function body */ }
的<interrupt_address>
是在矢量表中的中断的地址。所述<interrupt_category>
是1或2。例如,以限定在端口0引脚0中断:
static void _int_p00();
#pragma INTERRUPT _int_p00 0x10 1
static void _int_p00() { (*isr_p00)(); }
我们(在本例等isr_p00
)限定别处实际中断服务例程和使用函数指针来执行它们。
如果可以使用宏定义中断,那将很方便。我想要做的定义方式如下宏:
#define DECLARE_INTERRUPT(INT_NAME, INT_CAT) \
static void _int_##INT_NAME(); \
#pragma INTERRUPT _int_##INT_NAME INT_NAME##_ADDR INT_CAT \
static void _int_##INT_NAME() { (*isr_##INT_NAME)(); }
编译器抛出以下错误:
Formal parameter missing after '#'
说明如下一行:
static void _int_##INT_NAME() { (*isr_##INT_NAME)(); }
我猜预处理指令不能使用#define
s?有什么解决办法吗?
什么是单片机和编译器?如果它是基于GCC的,可能会有一个特殊的属性宏可以使用,如Microchip的C32:void __ISR(_TIMER_5_VECTOR)SomeISR(void)' – detly 2010-07-27 05:36:50
micro是OKI 431,编译器来自OKI:IDEU8。 – Donotalo 2010-07-27 05:42:47