Seltsame Warnung beim Assemblen (AVR)

Gast #149125
Lesenswert?
• ▲
▼
Ich hab mich jetzt endlich durchgerungen, meine AVR-Basteleien in
Assembler zu programmieren, da mein LCD mit C einfach keinen Mucks von
sich geben wollte. Bin jetzt auch erstaunlich weit gekommen und mein
LCD zeigt jetzt diese Zeilen auf den 16x4 Zeichen an:

59: string1:
60:  .db "Auf dieses LCD",0
61: string2:
62:  .db "passt eine Menge",0
63: string3:
64:  .db "nichtssagender",0
65:string4:
66:  .db "Text!",0

Wie man sieht, habe ich per ASM-Direktive die anzuzeigenden Strings in
den Programmspeicher gepackt. Das funktioniert auch wunderbar, nur
bekomme ich beim Assemblen eine verwirrende Warnung in den Zeilen 60,
63 u. 65:

warning: .cseg .db misalignment - padding zero byte

Nunja, mich verwirrt sowohl die Meldung als auch die Zeilen, in denen
sie auftaucht. Im Quellcode-Snippet seht ihr ja, welche das sind.
Wie gesagt, funktionieren tut es. Seltsamerweise sind im .hex-File nach
den String auch zwei 0-Stellen, außer beim letzten.

Forensuche hat nichts ergeben, weiß einer von euch was darüber?
Gast #149126
Lesenswert?
• ▲
▼
Das ist normal.
Flash ist wortorientiert, wenn du Bytes definierst, sollte deren Anzahl
geradzahlig sein. Ist das nicht der Fall, hängt der Assembler eben eine
Null dran und meldet das mit dieser Warnung.

...
Gast #149127
Lesenswert?
• ▲
▼
Ist ganz einfach: du musst immer eine gerade Anzahl Bytes eintragen.
Wenn das nicht so ist, dann wird eines angehängt, und zwar ne 0...

Das ganze liegt darin, dass der Programmspeicher Wort-weise aufgebaut
ist.

dave
Gast #149128
Lesenswert?
• ▲
▼
Hi

Ich vermute mal das der Assembler labels mit Wortaddressen berechnet.
Hat das Datenfeld dann eine ungerade Anzahl Bytes wird eben zur
nächsten Wortaddresse mit 0-Bytes aufgefüllt. Sollte aber eigentlich
nicht nötig sein da der AVR ja auch Byteweise auf seinen
Programmspeicher zugreifen kann.

Matthias
Gast #149129
Lesenswert?
• ▲
▼
Mensch ihr seid ja schnell!

Danke für die Info. Da fällt mir nämlich ein, dass ich mich beim
eingeben des Quellcodes noch fragte, ob meine Strings eine gerade
Anzahl an Bytes haben muss, weil ja die Speicheradressen beim
Ansprechen im Programm mit 2 multipliziert werden, aufgrund von "Das
ist einfach so"(tm). ;)
Gast #149130
Lesenswert?
• ▲
▼
Beim Datenzugriff mit LPM Befehl ist zwar byteweiser Zugriff auf den
Programmspeicher möglich, aber als Programmspeicher und Zugriff mittels
PC nur mit 16 Bit Breite. Atmel hat sich bei seinem Assembler für die
Organisation Label im .CSEG als Word Adresse entschieden, während IAR
auch im .CSEG byte-orientiert arbeitet. Beim Atmel Assembler werden
automatisch immer gerade Adressen erzeugt.

Antwort schreiben

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.

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.