Cortex-M4 マイクロコントローラーにいくつかのコードがあり、バイナリ プロトコルを使用して PC と通信したいと考えています。packed
現在、GCC 固有の属性を使用してパックされた構造体を使用しています。
大まかな概要は次のとおりです。
struct Sensor1Telemetry {
int16_t temperature;
uint32_t timestamp;
uint16_t voltageMv;
// etc...
} __attribute__((__packed__));
struct TelemetryPacket {
Sensor1Telemetry tele1;
Sensor2Telemetry tele2;
// etc...
} __attribute__((__packed__));
私の質問は:
- MCU とクライアント アプリの構造体にまったく同じ定義を使用すると仮定する
TelemetryPacket
と、上記のコードは複数のプラットフォーム間で移植できますか? (私は x86 と x86_64 に興味があり、Windows、Linux、および OS X で実行する必要があります。) - 他のコンパイラは、同じメモリ レイアウトでパックされた構造体をサポートしていますか? どの構文で?
編集:
- はい、パックされた構造体が非標準であることは知っていますが、それらの使用を検討するのに十分便利なようです。
- 私は C と C++ の両方に興味がありますが、GCC がそれらを異なる方法で処理するとは思いません。
- これらの構造体は継承されず、何も継承しません。
- これらの構造体には、固定サイズの整数フィールドと、他の同様のパックされた構造体のみが含まれます。(私は前にフロートでやけどをしたことがあります...)