Работаю в среде IAR for ARM 7.5 - программа под микроконтроллер STM32F103
На этот раз я столкнулся с такой проблемой: есть описание некоторой структуры
Код
typedef __packed struct {
unsigned int Type:4; // код типа операции
unsigned int Pause:1; // разрешение паузы до выполнения шага
unsigned int DrainGate1:1; // разрешение клапана 1
unsigned int DrainGate2:1; // разрешение клапана 2
unsigned int ReservedBits:9; // зарезервированные биты
unsigned int DrumSpeed; // скорость вращения
unsigned char Time; // время вращения
unsigned char Reserved[11]; // зарезервированные байты
} WPC_SPIN_t;
unsigned int Type:4; // код типа операции
unsigned int Pause:1; // разрешение паузы до выполнения шага
unsigned int DrainGate1:1; // разрешение клапана 1
unsigned int DrainGate2:1; // разрешение клапана 2
unsigned int ReservedBits:9; // зарезервированные биты
unsigned int DrumSpeed; // скорость вращения
unsigned char Time; // время вращения
unsigned char Reserved[11]; // зарезервированные байты
} WPC_SPIN_t;
я ожидаю получить размер структуры 16 байт и следующее размещение данных:
Код
xx xx sl sh
tt xx xx xx
xx xx xx xx
xx xx xx xx
tt xx xx xx
xx xx xx xx
xx xx xx xx
где xx - просто байт
sl - младший байт скорости
sh - старший байт скорости
tt - время вращения
На деле же я получаю размер структуры 18 байт и размещение байт, как показано ниже:
Код
xx xx sl sh
00 xx tt xx
xx xx xx xx
xx xx xx xx
00 xx tt xx
xx xx xx xx
xx xx xx xx
т.е. байт с временем перемещается на две позиции... а вместо него пишутся нули
склыдывается ощущение, что параметр DrumSpeed стал 4-байтовым, потому что при его изменении в последующие два байта пишутся нули.
Как мне заставить компилятор правильно размещать данные?