【发布时间】:2018-10-22 20:35:47
【问题描述】:
我正在尝试将一些函数编写为宏,但我就是不知道该怎么做。
#define PA0 (PORTA, PIN0_bm);
#define PA1 (PORTA, PIN1_bm);
...
#define PA7 (PORTA, PIN7_bm);
#define PD0 (PORTD, PIN0_bm);
#define PD1 (PORTD, PIN1_bm);
...
#define PD7 (PORTD, PIN7_bm);
然后是函数的宏
#define pinMode(x) (x[0].DIRSET = x[1])
我想在预处理器之后看起来像
pinMode(PA0) -> (PORTA.DIRSET = PIN0_bm)
编译 (AVR-gcc) 后,我收到 invalid types 'int[int]' for array subscript 错误。
是否可以将一个参数传递给宏并得到两个?
【问题讨论】:
-
如果您可以使用 C++ 语言,您能否解释一下为什么您要尝试使用宏来解决这个问题?
-
宏不是方法。
pinMode(PA0)与(PORTA,PIN0_bm);[0].DIRSET=(PORTA,PIN0_bm);[1])100% 相同,这显然没有意义 -
也许
std::map会做你想做的事。 -
@JakobJug:为什么不反过来使用宏呢?
#define pinmode(L,R) (L[0].DIRSET=R[1])然后#define PA0 pinmode(PORTA,PIN0_bm)? -
"...在 C++ 中,这会很耗时。"当你测量时,你看到了多少性能差异?我建议您使用 c++(因为不鼓励使用宏)并向您自己(以及您的同事和您的老板)证明您似乎相信什么。根据我在嵌入式系统多年的经验,我不赞成宏,主要是因为 -O3 非常好,并且内联有效。