2017-11-07 9 views
0

最近、私はこのように書かれたコードにつまずい:私は知りたいと思った何uint8_tデータタイプ初期

typedef struct 
{ 
    uint8_t TC0_WG0  :2; 
    uint8_t TC0_CS  :3; 
} Timer0; 

:2; & :3;が、具体的意味と言う部分を何ですか?ビット0,1,2のみまたは0,1,2にアクセスしていますか?& 8ビットの符号なし文字のうち3つまたは何?

+1

https://stackoverflow.com/questions/24933242/when-to-use-bit-fields-in-c – Gaurav

+0

https://stackoverflow.com/questions/10320731/concept-of-bitを参照してください。 -field – Gaurav

+0

これは標準のCコードではなく、拡張です。つまり、コンパイラが意味することは何でも意味しています。 – Lundin

答えて

1

これらは基本的にTC0_CSが3ビットであることを明示するビットフィールドです。

これらはスペースを節約するために使用できます。組み込みシステムでは、私は割り込みシステムを設計するときにこのような使用に直面しました。無効化割り込みを有効にする方法として特定の位置を指定するために使用されるビットフィールド。

彼は0,1,2ビットにアクセスしていませんが、OPは適切なビットマスキングを使用できます。

+1

感謝の男私は今それを得た! –

1

ビットフィールドメンバと呼ばれます。

cppreference発言者:

ビットフィールド

ビットで、明示的な幅を持つメンバを宣言します。隣接するビットフィールド のメンバーは、個々のバイトを共有して跨ぐようにパックすることができます。 - 宣言されているビットフィールドの名前

identifier(optional) : width  

識別子

ビットフィールド宣言は は、以下の宣言を使用して構造体または共用体の宣言です。名前は任意である:無名ビットフィールドは、パディング

幅の ビットの指定された数の導入 - 大きいかまたはゼロに等しい未満または根底 タイプのビット数に等しい値を持つ整数定数式を。 0より大きい場合、これはこのビット フィールドが占有するビット数です。値0は、名前なし ビットフィールドのみに許可され、特別な意味を持ちます。クラス定義内の次のビット フィールドが、割り当て単位の 境界で開始することを指定します。