Zastanawiam się, czy istnieje dyrektywa kompilatora GCC C, która pozwala mi określić kolejność bitów do pakowania struktury? Coś pokroju:Jak wymusić kolejność bitów struktury za pomocą kompilatora GCC?
#pragma bit_order left
Uzasadnieniem takiej potrzeby jest, że mam następującą strukturę:
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;
Przy takiej strukturze, chciałbym kompilator opakować to w ten sposób:
Bit order: | 7 6 5 4 3 2 1 0 |
Label: |B0 B1 B2 B3 B4 B5 B6 B7 |
Zamiast jak GCC robi:
Bit order: | 7 6 5 4 3 2 1 0 |
Label: |B7 B6 B5 B4 B3 B2 B1 B0 |
Mam do czynienia z MCU, które mają ogromne pliki nagłówkowe, które mają struktury obliczające przesunięcia bitów zgodnie z ustalonymi adresami sprzętowymi. Mam nadzieję, że istnieje kompilator w kompilatorze GCC C, który wykonuje zamiennik bitów dla mnie, zanim spróbuję odwrócić wszystkie pola w pliku dostarczonym przez producenta.
wielkość i kolejność i kompilator rozszerzeniem https://stackoverflow.com/questions/1490092/cc-force-bit-field-order-and-alignment robi 'packed' podzbiór pracy: https://stackoverflow.com/questions/1756811/does-gccs-attribute-packed-retain-the-original-ordering –