mikrocontroller.net

Forum: Compiler & IDEs msp430 packed structs


Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich mir auch ungefähr so gedacht. Aber ist denn nicht ein Bug, dass 
der Compiler das trotzdem so umsetzt?

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.