私はAVRに取り組んでおり、ライブラリには、次のようにプリプロセッサを使用TCD0_OVF_vect
するデバイス割り込みベクトルが含まれています。TCD0_CCA_vect
#defines
#define TCD0_OVF_vect_num 77
#define TCD0_OVF_vect _VECTOR(77) /* Overflow Interrupt */
それらにはタイマー オブジェクトも含まれます。
typedef struct TC0_struct
{
register8_t CTRLA; /* Control Register A */
...snip...
} TC0_t;
#define TCD0 (*(TC0_t *) 0x0900) /* 16-bit Timer/Counter 0 */
に似た構文TCD0
を使用して、名前付きタイマー オブジェクト を展開するマクロを定義できるようにしたいと考えています。例えば:TCD0_OVF_vect
VECT(TCD0, OVF_vect)
ISR(VECT(TCD0, CCA_vect)) {}
に変換します
ISR(TCD0_CCA_vect) {}
whereTCD0_CCA_vect
は展開する必要があるマクロです。
これを行う方法はありますか?
編集: さらに、次のことができるようになりたいです:
#define TIMER TCD0
#define VECT(a, b) ##SOMETHING##
そして、使用VECT(TIMER, CCA_vect)
して終了することができTCD0_CCA_vect
ます。これには別のレベルの間接化が必要であることはわかっていますが、頭を悩ませることはできません。