Daten von Feld in Struktur kopieren

Gast #4537929
Hallo Zusammen ich habe ein Problem beim kopieren von Werten aus einem 
Array in eine Struktur. Die Bilder dazu findet Ihr im Anhang.

ich möchte die Werte von "Msg.Data[]" in die Strktur 
"MTi_G700_with_GPS2" kopieren. Leider stimmen nach dem kopieren die 
Werte im Speicher (Memory 4 siehe Abbildung) nicht mit der Anzeige im 
Watch Fenster überein.

Msg.Data[3] = 0x0a wurde anscheiend richtig in den Speicher kopiert. 
Somit sollte das LSB von MTi_G700_with_GPS2.UCTTime_ns = 0x0a sein. Das 
ist leider nicht der Fall. Wo könnte der Fehler liegen. Warum wird in 
MTi_G700_with_GPS2.UCTTime_ns der um ein Byte nach Rechts verschobene 
Wert angezeigt?

Danke für eure Hilfe.
Viele Grüße
Andre
Angehängte Dateien:
#4537944
Dein Compiler padded vermutlich die Struct.
Oft ist es so, dass 32-bit Werte auf Speicheradressen liegen müssen, die 
ein vielfaches von 4 darstellen.
Wenn du in deiner Struct jetzt ein 8-bit und ein 16-bit Wert hast, fehlt 
noch 1 byte bis zur nächsten 32-bit-"fähigen"-Speicheradresse.
Und genau auf dieser padding position scheinen deine 0x0a zu landen.
Du kannst dir die Struktur ja mal im Memory-Dump angucken.

PS: Programmcode kann auch als .txt gepostet werden ;-)
#4537945
Das sieht mir stark nach einem alignment-Problem aus.

Offenbar fügt der compiler ein Padding-Byte an der stelle i==3 ein.
Ein memcpy (wie du es hier tust) funktioniert somit nicht mehr.
__attribute__((packed)) könnte dir helfen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.