我正在尝试将标头信息移入C代码,而无需实际编写代码。以下是标头的示例,该标头定义了系统中有多少个ADC:
//example definition
#define CONF_USEADC2 6 /*ADC2 on SPI2*/
#define CONF_USEADC3 7 /*ADC3 on SPI4*/
根据某些条件,此硬件是否存在,因此,有一个字节的数据会告诉您是否有ADC,以便您知道系统中有多少个ADC(存在总线限制,因此如果您有2个ADC,则数据速度较慢)。我在JDEC总线上有1到24个ADC。当前创建位的代码如下所示:
#ifdef CONF_USEADC2
uc_tmp = uc_tmp | (1 << CONF_USEADC2);
#endif
#ifdef CONF_USEADC3
uc_tmp = uc_tmp | (1 << CONF_USEADC3);
#endif
根据定义的值设置哪个位,您可以看到它很快变得一团糟。现实中有许多这样的定义使事情变得一团糟。
MACRO是否有某种聪明的方法来创建方法,使之可以将诸如CONF_USEADC2
之类的内容传递给宏,如果已定义,则它会设置该位,否则,它会忽略该位?这样,我可以使用macro(CONF_USEADC2)
来替换上面的代码以提高可读性。