Мне было интересно, существует ли директива компилятора 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 есть директива компилятора, которая меняет порядок битов за меня, прежде чем я попытаюсь перевернуть все поля в файле, предоставленном производителем.