Вы не сказали нам, какую конкретную платформу вы используете, поэтому я не могу дать вам достаточно подробного ответа, но вам нужно удалить отступы из вашей структуры.Или, другими словами, вы хотите упаковать свои структуры.
Вот как я понимаю, вы хотите, чтобы размер вашей памяти составлял два байта в одном 16-битном слове.
struct {
uint8_t widthValidated;
uint8_t heightValidated;
} status;
Требовать от компилятора создания определенной границы вы можете сделать:
для arm:
struct __attribute__((packed)){
uint8_t widthValidated;
uint8_t heightValidated;
} status;
для gcc:
#pragma pack (1)
struct __attribute__((packed)){
uint8_t widthValidated;
uint8_t heightValidated;
} status;
Ваша платформа может отличаться, но она должна найти способ сделать это, когда вы ищете структуру упаковки.
Объединение внутри структуры также может быть вариантом, но это не обязательно будет переносимым как бит / байтпорядок заказа может отличаться от платформы к платформе.
Вы видите меня, используя uint8_t
выше.Это typedef
сделано внутри <stdint.h>
.Это стандартизированный способ объявления целочисленной переменной определенной ширины.Полезные типы внутри микроконтроллера: неопределенное целочисленное семейство: uint8_t
(8-бит), uint16_t
(16-бит) и uint32_t
(32-бит).И их подписанные аналоги: int8_t
(8-бит), int16_t
(16-бит) и int32_t
(32-бит).