www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie lang darf define byte sein?


Autor: Dominik L (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Wenn ich im AVR Studio mit .db eine Reihe von Bytes definiere, wie lang
darf dann die Reihe nach rechts sein? Bis zu 36 Byte macht der Compiler
ohne Probleme, aber ab 36 bekomme ich dann die Warnung:

warning: .cseg .db misalignment - padding zero byte
Was bedeutet das?

Und nochmal was grundsätzliches zum Speicherzugriff. Im AVR Tutorial
steht, dass man bei der Zuweisung zum Z-Pointer nicht die eigentliche
Sprungmarke einsetzen soll, sondern das ganze *2 nehmen soll. Warum
muss ich das machen? Steht im Tutorial nicht erklärt. Und wenn ich das
beim einer Zuweisung so machen muss, muss ich das dann auch bei dem
Befehl:

adiw ZL, 1

beachten und für einen Schritt im Speicher weiter auch *2 nehmen?

MFG Dominik

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wenn ich im AVR Studio mit .db eine Reihe von Bytes definiere, wie
> lang darf dann die Reihe nach rechts sein? Bis zu 36 Byte macht
> der Compiler ohne Probleme,

Wenn du Probleme hast, alle in eine Zeile zu packen, dann pack sie halt
in mehrere Zeilen.

> aber ab 36 bekomme ich dann die Warnung:


> warning: .cseg .db misalignment - padding zero byte
> Was bedeutet das?

Daß der Assembler eine ungerade Anzahl von Bytes vorgefunden hat. Da
der Programmspeicher 16bit breit ist, muß es immer eine gerade Anzahl
sein. Er sagt dir, daß er noch ein Byte mit dem Wert 0 eingefügt hat,
um das zu erreichen.

> Und nochmal was grundsätzliches zum Speicherzugriff. Im AVR
> Tutorial steht, dass man bei der Zuweisung zum Z-Pointer nicht die
> eigentliche Sprungmarke einsetzen soll, sondern das ganze *2
> nehmen soll. Warum muss ich das machen?

Die Sprungmarke rechnet auch in 16bit-Schritten. Da Daten aber immer
8bit breit sind, gibt es pro 16bit-Adresse zwei Werte, und damit man
die zweite Hälfte jedes Speicherworts auch lesen kann, ist die Adresse
beim Datenzugriff doppelt so groß.

> Steht im Tutorial nicht erklärt. Und wenn ich das beim einer
> Zuweisung so machen muss, muss ich das dann auch bei dem
> Befehl:
>
> adiw ZL, 1
>
> beachten und für einen Schritt im Speicher weiter auch *2 nehmen?

Nur, wenn du ein Byte überspringen willst.

Autor: Dominik L (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK danke für die ausführliche Erklärung. Is jetzt schon um einiges
klarer geworden.
Wenn ich es in mehrere Zeilen schreiben möchte, brauche ich ja
anscheinend vor jeder Zeile ein neues .db. Werden die dann vom Linker
direkt hintereinander gehängt? Wo finde ich eigentlich die Datei, die
vom Linker ausgegeben wird, also die .lst ist das glaube ich, wo der
komplette Code mit den zusammenhängenden Adressen drinstehen?
Mein AVR Studio erzeugt die irgendwie nicht. Zumindest finde ich sie
nicht im Projektordner.

Gruß Dominik

Autor: Mark Hämmerling (haemi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Salve,

ja, aufeinanderfolgende .db-Zeilen werden auch im Speicher
zusammengehängt. Was soll dazwischen auch kommen?
Du mußt halt nur drauf achten, daß nicht nur ein .db-Block, sondern
wirklich jede einzelne Zeile eine gerade Anzahl von Bytes enthält,
sonst paddet der Assembler jede Zeile mit einem Zero-Byte. Und dann
kommt Murks raus.

Mark

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.