www.mikrocontroller.net

Forum: Compiler & IDEs winavr assembler .byte directive even oder odd ???


Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

habe in einem projekt (sprache c) ein assembler file mit einer .byte 
directive (im flash)

...
INIT1:
.byte 0x07,0x00

.end

wenn ich nun eine ungerade anzahl declariere, wie z.b.

...
INIT1:
.byte 0x07

.end

dann liefert make ziemlich viele warnungen, und das programm läuft auch 
nicht mehr:
warning: internal error: out of range error

muss immer eine gerade anzahl an bytes declariert werden ?

danke

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, weil der Flash-Speicher der AVR-Architektur 16 bit breit ist und 
daher immer zwei Bytes in einer Speicherzelle hält.

Autor: christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja danke habe ich mir auch gedacht

da der assembler von avrstudio automatisch auffüllen würde mit .db


danke

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, stimmt so nicht ganz.  Der Flash eines AVR weiß nicht recht,
ob er mit 16-bit- oder mit 8-bit-Einheiten adressiert werden will.
Befehlslesen (und alle PC-Rechnungen) nutzen das erste Format,
Datenoperationen (LPM, SPM) das zweite.  Daher muss man bei einem
ATmega128 zwar bereits Klimmzüge machen, wenn man die obere Hälfte
des Flash-ROMs für Daten benutzen möchte, während jedoch alle
Befehle mühelos im gesamten ROM adressiert werden können.

Wichtig ist daher nur, dass jeder Befehl auf einer geradzahligen
Adresse steht.  Wenn man vor den Befehlen noch Daten unterbringen
möchte, muss man also am Ende ggf. ein Füllbyte einfügen.  Wenn
man die AVR-GCC-Infrastruktur nimmt (also die progmem section), dann
erledigen die Linkerscripts dieses Padding selbst.  Diese Infrastruktur
steht einem natürlich auch im Assembler zur Verfügung.

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.