默认情况下,在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

08-28 02:00