【发布时间】:2018-01-26 16:44:49
【问题描述】:
我正在为 avr gpio 编写一个驱动程序,我有一个函数接受一个枚举输入。我制作了一个宏,在将端口名称与“__”连接后调用此函数,因此我始终可以使用 initPort(PORTA,1,...)。
#define initPort(port,mask,dir,pullup) GPIO_Init(port ## __,mask,dir,pullup)
typedef enum {
PORTA__,
PORTB__,
PORTC__,
PORTD__
} PORT;
void GPIO_Init(PORT p, uint8_t pins, Direction dir,uint8_t pullup) {
switch (p) {
case PORTA__:
现在,当我想使用该功能时,我使用:initPort(PORTA,1,...),这很好用。 问题是当我想使用类似的东西时:
#define LED_PORT PORTA
initPort(LED_PORT,1,...)
现在发生的事情是 GPIO_Init 的参数现在是 LED_PORT__ 而不是 PORTA__
是否可以解决这个问题,或者我必须使用其他方式?
【问题讨论】:
标签: c macros embedded avr atmega