通过宏设置一个位,如果它定义了一个值

时间:2019-12-12 16:22:40

标签: c macros

我正在尝试将标头信息移入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)来替换上面的代码以提高可读性。

0 个答案:

没有答案