構造体のパッキングのビット順序を決定できる GCC C コンパイラ ディレクティブがあるかどうか疑問に思っていました。次のようなもの:
#pragma bit_order left
そのような必要性の理論的根拠は、次の構造を持っていることです。
struct {
union {
unsigned char BYTE;
struct {
unsigned char B0: 1;
unsigned char B1: 1;
unsigned char B2: 1;
unsigned char B3: 1;
unsigned char B4: 4;
}BIT;
}ITEM;
} myStruct;
この構造では、コンパイラに次のようにパックしてもらいたいと思います。
Bit order: | 7 6 5 4 3 2 1 0 |
Label: |B0 B1 B2 B3 B4 B5 B6 B7 |
GCCがそれを行う方法ではなく:
Bit order: | 7 6 5 4 3 2 1 0 |
Label: |B7 B6 B5 B4 B3 B2 B1 B0 |
規定のハードウェア アドレスに従ってビット オフセットを計算する構造を持つ巨大なヘッダー ファイルを持つ MCU を扱っています。製造元が提供するファイルのすべてのフィールドを反転しようとする前に、GCC C コンパイラにビット オーダー スワップを行うコンパイラ ディレクティブがあることを願っています。