我正在开发一个 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) {}
TCD0_CCA_vect
需要扩展的宏在哪里。
有没有办法做到这一点?
编辑: 此外,我希望能够做到:
#define TIMER TCD0
#define VECT(a, b) ##SOMETHING##
然后能够使用VECT(TIMER, CCA_vect)
并最终得到TCD0_CCA_vect
. 我知道这需要另一个级别的间接性,但我不能完全理解它。