#define MACRO_CONCAT2_EXPAND(a, b) a ## b
#define MACRO_CONCAT2(a, b) MACRO_CONCAT2_EXPAND(a, b)
#define MACRO_CONCAT3_EXPAND(a, b, c) a ## b ## c
#define MACRO_CONCAT3(a, b, c) MACRO_CONCAT3_EXPAND(a, b, c)
#define MACRO_ARG21(a, b) a
#define MACRO_ARG22(a, b) b
我用的是c30编译器。我这里是什么出现问题了
#define MACRO_CONCAT2_EXPAND(a, b) a ## b
#define MACRO_CONCAT2(a, b) MACRO_CONCAT2_EXPAND(a, b)
#define MACRO_CONCAT3_EXPAND(a, b, c) a ## b ## c
#define MACRO_CONCAT3(a, b, c) MACRO_CONCAT3_EXPAND(a, b, c)
#define MACRO_ARG21(a, b) a
#define MACRO_ARG22(a, b) b
#define PIN_DIR(pin, DIR) MACRO_CONCAT3(_TRIS, MACRO_ARG21(pin), MACRO_ARG22(pin)) = DIR
#define PIN_OUT(pin, OUT) MACRO_CONCAT3(_LAT, MACRO_ARG21(pin), MACRO_ARG22(pin)) = OUT
#define PIN_IN(pin) MACRO_CONCAT3(_R, MACRO_ARG21(pin), MACRO_ARG22(pin))
这个是宏的一种特殊用法,就是将两个内容合成一个,在使用一系列有规律的寄存器时非常有用,在很多程序里面也很常见的。
特别是希望程序自动适应不同型号的MCU时,使用这个方法自动配置对应的寄存器,对程序移植很有帮助。
C30中也有延时函数的,好像是__delay_ms(),要包含一个头文件才行。好久不用PIC单片机,有点记不清了。C30可以换成XC16,支持的功能更多。
为什么我实际的效果跟我软件上面的延时不一样呢?
一周热门 更多>