【发布时间】:2014-07-09 19:25:50
【问题描述】:
我开始学习编程嵌入式 C 微控制器,并想做一些让我的生活更轻松的事情。通常在处理位掩码时,每个人都会使用以下内容:
char a = (1 << 3) | (1 << 1) | (1 << 5);
我想为这样的事情使用宏。对于一个掩码,我可以简单地定义这个宏:
#define M(n) (1 << (n))
没什么特别的。问题是我无法找到一个可以让我输入的好的解决方案:
a = MM( 3, 1, 5 ); 或至少a = MM( 3, 3, 1, 5 );(其中第一个3 是参数的数量)
而不是a = M(3) | M(1) | M(5);
我想出了一个解决方案,它暗示使用具有多个参数的函数,但我无法使用宏来做到这一点,这真的让我很烦恼。
【问题讨论】:
-
当然可以。
#define MM( nr, args... ) //whatever查看可变参数宏。 -
查看常见的 MCU 头文件以查看好的宏示例。你似乎也想有点太花哨了。例如,在我的 msp430 项目中,某处有一堆
#define BIT0 1<<0、#define BIT1 1<<1等等……而且它非常易读,而且更喜欢看到像P1OUT = BIT1 | BIT2 | BIT3这样的代码。您可以使用这些来定义您可能经常使用的更复杂的掩码。 -
我知道我的愿望可能有点花哨,但我认为这个问题更多的是一个有趣的难题,而不仅仅是需要好的代码。
标签: c macros embedded bit-manipulation