C语言宏作为另外一个宏的参数

问题:经常遇到单片机的某一个输入输出io量需要更换io脚位。而有些单片机初始化的每个脚位标识或者宏都不一样,所以在改脚位的时候要改动比较多。

如果用宏替代 标识的一部分可能会涉及到用宏作为宁外一个宏的参数的场景。

例如配置7个灯的脚位

头文件:

#define L_1 PB6

#define L_2 PB7

#define L_3 PC1
#define L_4 PD0
#define L_5 PB0


#define L_P PB2
#define L_T PB1

//#define ZZC_SET_IN(EXP) do{SET_##EXP##_IO_IN;} while(0)
//#define ZZC_SET_OUT(EXP) do{SET_##EXP##_IO_OUT;} while(0)

#define ZZC_SET_IN_1(EXP) (SET_##EXP##_IO_IN)
#define ZZC_SET_OUT_1(EXP) (SET_##EXP##_IO_OUT)

#define ZZC_SET_H_1(EXP) (SET_##EXP##_H)
#define ZZC_SET_L_1(_1EXP) (SET_##EXP##_L)

#define ZZC_SET_PU_ON_1 (SET_##EXP##_PU_ON)

#define ZZC_SET_IN(EXP) ZZC_SET_IN_1(EXP)//    这里做是然参数宏先被展开了,不然就会的到 SET_L_1_IO_IN 了
#define ZZC_SET_OUT(EXP) ZZC_SET_OUT_1(EXP)

#define ZZC_SET_H(EXP) ZZC_SET_H_1(EXP)
#define ZZC_SET_L(_1EXP) ZZC_SET_L_1(_1EXP)

#define ZZC_SET_PU_ON ZZC_SET_PU_ON_1

 

c文件:

void led_init(void)
{
ZZC_SET_OUT(L_1);
ZZC_SET_OUT(L_2);
ZZC_SET_OUT(L_3);
ZZC_SET_OUT(L_4);
ZZC_SET_OUT(L_5);

ZZC_SET_OUT(L_P);
ZZC_SET_OUT(L_T);
}

 

资料:https://www.cnblogs.com/the-capricornus/p/6841913.html

 

posted @ 2022-02-14 11:56  啊展  阅读(314)  评论(0)    收藏  举报