Ich benutze eine Third-Party-Bibliothek (mavlink), die eine Anzahl von Strukturen definiert, die alle mit __attribute__((packed))
markiert sind, so dass sie effizient über eine serielle Verbindung übertragen werden können (es ist in C geschrieben und ich bin Verwendung in einer C++ - Anwendung). Wenn ich sie erhalte und rekonstruiere, möchte ich ihnen ein Zeitstempelfeld hinzufügen. Ich denke, der einfachste Weg ist, eine neue Struktur zu erstellen, die die vorhandene Struktur erbt. das heißt in der mavlink Bibliothek wird diese Struktur definiert:Erben einer gepackten C-Struktur
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;
wo MAVPACKED
ein Makro, das __attribute__((packed))
gilt. sizeof(mavlink_heartbeat_t)
kehrt 9. Wenn ich
struct new_heartbeat_t : mavlink_heartbeat_t
{
uint64_t timestamp;
};
sizeof(new_heartbeat_t)
Renditen 24 definieren, so sieht es aus wie 7 Füllbytes hinzugefügt werden (I bis Ende mavlink_heartbeat_t annehmen würde, so dass Zeitstempel beginnen bei Byte 16.)
Existieren Irgendwelche Fehler oder Dinge, die du beachten musst, oder gibt es einen besseren Weg?
Verkapselung auf lange Sicht besser verwaltbar sein könnte. –
Sie können versuchen, das Attribut __ ((__ gepackt)) auf Ihre Struktur anzuwenden und die Größe zu überprüfen. – manu
@RichardHodges wie meinst du das? Meinst du statt "mavlink_heartbeat_t" zu vererben, um es zu einem privaten Mitglied der neuen Struktur zu machen und dann jedem Mitglied von 'mavlink_heartbeat_t' Zugriffsrechte zu geben? –