1

デフォルトでは、高速フレームは 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変数ですか?

問題は、ドライバーでそのようなマクロを処理する方法に関するより一般的なものです。私は他のコードでもそれらを見てきましたが、いつも混乱していました。

4

2 に答える 2

0

わかりました、簡単な例で説明しようとします

#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すると、次のようになります。0xb0xf

00001011
00000010
00000000

ご覧のように(((_v) >> 2) & 0x1 != 1

于 2013-08-07T09:46:14.073 に答える
0

高速フレームが有効になっていないか、ath5k で使用されていません。これは、カードが一度に複数のフレームを送信できるようにする機能 (11nフレーム アグリゲーションの初期バージョンと考えてください) であり、MadWiFi とその独自のドライバーに実装されており、それをサポートするアクセス ポイントでのみ使用できます。デバイスの EEPROM にフラグが格納されており、高速フレームを使用できるかどうかをドライバーに指示します。参照するマクロは、そのフラグが設定されているかどうかを確認するだけです。常に 1 を返すようにヘッダー ファイルを変更できますが、違いはありません。ドライバーはその情報を使用しません。

于 2015-04-30T21:38:55.737 に答える