私は__attribute__((packed))
というタグが付けられた多数の構造体を定義する第三者のライブラリ(mavlink)を使用していますので、シリアル接続を介して効率的に送信できます。 C++アプリケーションで使用しています)。私がそれらを受け取って再構築するとき、私はそれらにタイムスタンプフィールドを追加したいと思います。私は最も簡単な方法は、既存の構造体を継承する新しい構造体を作成することだと思います。即ちmavlinkライブラリでこの構造体が定義されている:パックされたCの構造体を継承する
MAVPACKED
は
__attribute__((packed))
を適用するマクロある
MAVPACKED(
typedef struct __mavlink_heartbeat_t {
uint32_t custom_mode;
uint8_t type;
uint8_t autopilot;
uint8_t base_mode;
uint8_t system_status;
uint8_t mavlink_version;
}) mavlink_heartbeat_t;
。 sizeof(mavlink_heartbeat_t)
戻っ9.私は、
struct new_heartbeat_t : mavlink_heartbeat_t
{
uint64_t timestamp;
};
sizeof(new_heartbeat_t)
リターン24を定義する7つのパディングバイトが追加されているように、それは(バイト16のタイムスタンプ開始するように、私はmavlink_heartbeat_tの最後まで引き受ける)に見えるよう
がある場合これをやっているときに気が付かなければならないことや良い方法があるでしょうか?
カプセル化は長期的にはより保守かもしれません。 –
構造体に属性__((__ packed))属性を適用してサイズを確認できます。 – manu
@RichardHodgesどういう意味ですか? 'mavlink_heartbeat_t'を継承する代わりに、それを新しい構造体のプライベートメンバにして、' mavlink_heartbeat_t'の各メンバにアクセサを提供することを意味しますか? –