Forum: Mikrocontroller und Digitale Elektronik Daten von Feld in Struktur kopieren


von Andre Ogrodowski (Gast)


Angehängte Dateien:

Lesenswert?

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

von Joe F. (easylife)


Lesenswert?

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 ;-)

von Little B. (lil-b)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.