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