Hallo, wenn ich beim MSP430-gcc eine struct mit _attribute_ ((packed)) definiere, kann ich auf Wörter die an ungeraden Speicherstellen liegen nicht zugreifen. Ist das ein bug im Compiler? - Gibt es einen workaround? Ich muss für ein Protokoll ständig Buffer auf eine solche Struct casten um dann einzelne Werte auszulesen. Sowohl auf meinem PC als auch auf einem testweise zu Hilfe gezogenem LPC2148 funktioniert der Code tadellos... Grüße, Heiko
Nein, der MSP430 kann Worte nur an geraden Adressen lesen und schreiben. Mit _attribute_ ((packed)) weist du den Compiler an, Worte nicht auf gerade Adressen zu justieren. Der Prozessor nimmts dann übel...
Hab ich mir auch ungefähr so gedacht. Aber ist denn nicht ein Bug, dass der Compiler das trotzdem so umsetzt?
Nein. Automatisch macht er es ja richtig. Wenn du ihm was anderes sagst, dann geht er eben davon aus, daß du weißt, was du tust.
Ok. Kann ich denn Byteweise auf die ungeraden Speicherstellen zugreifen und mir die Wörter selbst zusammenbauen. Also ungefähr so: /*Hilfskonstrukt für msp430 der nur auf gerade wörter zugreifen kann*/ uint8 *hlp = (uint8*) &entry->filesize; res->filesize = (((uint32)(*(hlp+3)))<<24) + (((uint32)(*(hlp+2))<<16)) + (((uint32)(*(hlp+1))<<8)) +(uint32)*(hlp) ; wobei entry->filesize an einer ungeraden Speicherstelle liegt und ein unsigned long ist.
> Ok. Kann ich denn Byteweise auf die ungeraden Speicherstellen zugreifen > und mir die Wörter selbst zusammenbauen. Klar doch. Du tauschst damit sozusagen Ram gegen Flash.
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.