У меня есть код на микроконтроллере Cortex-M4 и я хотел бы общаться с ПК с использованием двоичного протокола. В настоящее время я использую упакованные структуры с использованием специфичного для GCC атрибута packed
.
Вот грубая схема:
struct Sensor1Telemetry {
int16_t temperature;
uint32_t timestamp;
uint16_t voltageMv;
// etc...
} __attribute__((__packed__));
struct TelemetryPacket {
Sensor1Telemetry tele1;
Sensor2Telemetry tele2;
// etc...
} __attribute__((__packed__));
Мой вопрос:
- Предполагая, что я использую то же определение для структуры
TelemetryPacket
на MCU и клиентском приложении, будет ли приведенный выше код быть переносимым на нескольких платформах? (Меня интересуют x86 и x86_64, и нужно, чтобы он работал в Windows, Linux и OS X.) - Другие компиляторы поддерживают упакованные структуры с одинаковым макетом памяти? С каким синтаксисом?
ИЗМЕНИТЬ
- Да, я знаю, что упакованные структуры нестандартны, но они кажутся достаточно полезными, чтобы рассмотреть возможность их использования.
- Мне интересны как C, так и С++, хотя я не думаю, что GCC будет обрабатывать их по-разному.
- Эти структуры не наследуются и ничего не наследуют.
- Эти структуры содержат только целочисленные поля фиксированного размера и другие подобные упакованные структуры. (Я был сожжен поплавками раньше...)