我正在使用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