Как обеспечить соблюдение порядка битов структуры с помощью компилятора GCC?

Мне было интересно, существует ли директива компилятора 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 |

Я имею дело с микроконтроллерами, у которых есть огромные файлы заголовков, которые имеют структуры, которые вычисляют битовые смещения в соответствии с установленными аппаратными адресами. Я надеюсь, что в компиляторе GCC C есть директива компилятора, которая меняет порядок битов за меня, прежде чем я попытаюсь перевернуть все поля в файле, предоставленном производителем.

11
задан Ciro Santilli 新疆改造中心法轮功六四事件 30 July 2017 в 11:13
поделиться