【发布时间】:2020-10-09 08:35:32
【问题描述】:
我正在使用 X 宏生成将 GPIO 设置为 0 或 1 的函数(我生成了大约 60 个函数来设置大约 30 个 GPIO)。下面是一个例子(这个例子我刚刚写过,所以语法可能有误):
/* X(pin_name, pin_nb) */
#define CPLD_GPIOs \
X(Pin0, 0) \
X(Pin1, 1) \
X(Pin2, 2) \
X(Pin3, 3)
我生成访问这些 GPIO 的函数:
#define X(pin_name, pin_nb) \
static void SetOn_GPIO##pin_name (void) { \
SetOn_GPIOpins(pin_nb);\
}
CPLD_GPIOs
#undef X
SetOff_GPIOXXX 函数存在相同的过程。
有没有一种方法可以在程序的其他部分以SetOn_GPIOPin2 的形式访问上面由编译器生成的函数,而无需直接编写函数名? (为了使代码尽可能全局化)
在预处理结束时,我们应该只从 X-Macro 生成 SetOn_GPIOPin2();(而不是每个 X-macro 条目)。
预处理前:
void foo ()
{
/* some code */
/*
* Macro to generate the desired function.
* For e.g: SetOn_GPIOPin2();
*/
/* some code */
}
预处理后:
void foo ()
{
/* some code */
/* Function resulting of the pre-processing */
SetOn_GPIOPin2();
/* some code */
}
【问题讨论】:
-
为什么不能只写
SetOn_GPIOPin2();? -
@mkrieger1 :我可以写
SetOn_GPIOPin2(),但如果有人或我决定更改X-Macro定义中的引脚名称,我应该更改对这个函数的每次调用。