Добрый день, коллеги!
Работаю в среде 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;
я ожидаю получить размер структуры 16 байт и следующее размещение данных:
Код
xx xx sl sh
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
т.е. байт с временем перемещается на две позиции... а вместо него пишутся нули
склыдывается ощущение, что параметр DrumSpeed стал 4-байтовым, потому что при его изменении в последующие два байта пишутся нули.
Как мне заставить компилятор правильно размещать данные?
Сообщение отредактировал Василий Зыков - Apr 25 2017, 12:55