mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Seltsame Warnung beim Assemblen (AVR)


Autor: Hugoderwolf (Gast)
Datum:

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

Autor: ...HanneS... (Gast)
Datum:

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

...

Autor: dave w. (Gast)
Datum:

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

Autor: Matthias (Gast)
Datum:

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

Autor: Hugoderwolf (Gast)
Datum:

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

Autor: mmerten (Gast)
Datum:

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

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.