默认情况下,在ath5k中启用快速帧。(http://wireless.kernel.org/en/users/Drivers/ath5k)
我找到了禁用它的宏
#define AR5K_EEPROM_FF_DIS(_v) (((_v) >> 2) & 0x1
问题是我该怎么处理?
我把上面的线换成
#define AR5K_EEPROM_FF_DIS(_v) 1
?
我要通过一些参数来编译它吗?
比特移位的表达使我困惑。
_v
是变量吗?如何在驱动程序中处理这样的宏,这个问题更为普遍。我也在其他代码中见过它们,而且总是感到困惑。
最佳答案
好吧,我试着用一个简单的例子来解释
#include <stdio.h>
/* Just for print in binary mode */
char *chartobin(unsigned char c)
{
static char a[9];
int i;
for (i = 0; i < 8; i++)
a[7 - i] = (c & (1 << i)) == (1 << i) ? '1' : '0';
a[8] = '\0';
return a;
}
int main(void)
{
unsigned char u = 0xf;
printf("%s\n", chartobin(u));
u >>= 2; // Shift bits 2 positions (to the right)
printf("%s\n", chartobin(u));
printf("%s\n", chartobin(u & 0x1)); // Check if the last bit is on
return 0;
}
输出:
00001111
00000011
00000001
是否用
#define AR5K_EEPROM_FF_DIS(_v) 1
替换上述行?不!!
如果用
u
而不是0xb
初始化0xf
,则得到:00001011
00000010
00000000
如您所见
(((_v) >> 2) & 0x1 != 1