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
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 ;-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

