我希望能够定义一个元组,它代表其他宏所需的参数。
我认为最好的方法是通过示例来说明我想要的:
#include <avr/io.h>
#define LED_PORT PORTB
#define LED_DDR DDRB
#define LED_PIN PB7
#define LED LED_PORT, LED_DDR, LED_PIN
#define OUTPUT(port, ddr, pin) ddr |= 1 << pin
void main(void) {
OUTPUT(LED);
}
我希望
OUTPUT(LED)
可以被扩展为以下内容:LED_DDR |= 1 << LED_PIN
我遇到的问题与扩展顺序有关,导致出现如下错误:
这是用于AVR项目的自定义硬件环境的情况,我已经定义了LED和其他组件以及相应的LED_PORT、LED_DDR和LED_PIN。宏“OUTPUT”需要3个参数,但只提供了1个
然后,我想定义更多的宏,可以使用该LED并使用适当的参数来映射到最简洁的方式。
标准C预处理器能实现这个吗?
LET_PIN
、LET_PORT
、LET_DDR
和OUTPUT
的定义。因此,请编辑您的问题以改进它。 - Basile StarynkevitchPORTB
,DDRB
,PB7
是整型常量吗? - Basile StarynkevitchPB7
是一个整型常量,PORTB
和DDRB
的形式为(*(volatile uint8_t*) (some_address))
。 - Wintermute