我正在使用XC8编译器开发带有PIC的小型嵌入式应用程序。在XC8中设置引脚(输出或输入)的使用,程序员应该执行如下指令:
TRISAbits.RA0 = 1;
特别是:
我想要做的是用人类可读的名称定义所有引脚,例如:
#define LED_1 A,RA0
#define LED_2 A,RA1
#define SWITCH_1 B,RB5
...
并定义一些以这种方式使用的SET_OUTPUT
或SET_INPUT
宏:SET_OUTPUT(LED_1)
。
我试图做的是这两个宏:
#define SET_INPUT(port, pin) TRIS ## port ## bits. ## pin ## = 0
但是,先前定义的常量中的逗号不会扩展并解释为单个参数。我也试过了:
#define SET_INPUT(X) SET_INPUT_(X ## "")
#define SET_INPUT_(port, pin) TRIS ## port ## bits. ## pin ## = 0
没有成功。
基本上与这个问题相反:Comma in C/C++ macro
是否存在解决方案或更方便的方法?
答案 0 :(得分:2)
你很亲密:
#define SET_INPUT(X) SET_INPUT_(X)
#define SET_INPUT_(port, pin) TRIS ## port ## bits.pin = 1
##
仅用于粘贴两个令牌以形成另一个令牌。对于您没有形成新令牌的情况(例如bits.pin
),您不需要做任何特别的事情。
#define SET_INPUT_(port, pin) do { TRIS ## port ## bits.pin = 1; } while (0)