www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Grundsatzfrage 16Bit-Variablen im SRAM


Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Ich progge schon ne Weile mit AVR-Studio und mir ist jetzt in der
Simulation aufgefallen, das AVR-Studio 16Bit-Variablen als Hi:Lo
darstellt.
Also Adresse 0 als Hi-Byte und Adresse 1 als Lo-Byte.
Da bei allen 16Bit-Registern, z. B. für Timer1, Adresse 0 das Lo-Byte
und Adresse 1 das Hi-Byte ist, habe ich mir angewöhnt, auch im SRAM die
Variablen so zu schreiben/lesen (lo:hi).
Gibt es bestimmte Richtlinien ob 16Bit-Variablen im SRAM nun lo:hi oder
hi:lo geschrieben/gelesen werden an die man sich halten kann?
Oder kann man dem AVR-Studio sagen, er möchte doch 16Bit nicht als
hi:lo sondern lo:hi auslesen und anzeigen?
Wie rum machen es die C-Compiler?
Nicht, das ich vielleicht mal in C eine ASM einfüge und es dann falsch
herum lese oder schreibe.

Gruß
Andi

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IMHO kann man das nicht.

"Wie rum machen es die C-Compiler?"

Die generelle Reihenfolge ist ja eine Frage der CPU: Schon immer musste
man hier das Intel- vom Motorolaformat unterscheiden. Ich würde die
Reihenfolge immer direkt lesefähig schreiben.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, bei 16/32Bit-CPUs hängt es wirklich von der CPU ab.
Aber bei 8Bit-CPUs (AVR) doch eigentlich vom Compiler.
Wegen dem direkt lesefähig meinst Du damit z. B., wenn in XL lo und in
XH hi dann lo auf Adresse+0 und hi auf Adresse+1?

Gruß
Andi

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So viel ich weiss legt der AVR-GCC Variablen mit Breite>8 als
Litte-Endian ab, also wäre der Wert 1 als 16-Bit-Wert im Speicher als
0100 gespeichert

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann werde ich wohl beim Little-Endian bleiben.
Vielen Dank für eure Antworten!

Gruß
Andi

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry nochmal!
Wenn man in der Simulation den Databereich als 16 Bit Decimal anzeigt,
gibt es da eine Möglichkeit, die 16Bit-Werte in Little-Endian umrechnen
zu lassen?
Ich kann mich auf den Kopf stellen, der Simulator rechnet das für
Decimal-Darstellung immer mit Adresse0 * 256 + Adresse1, also in
Big-Endian um.

Gruß
Andi

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf dem Stack liegen Return-Adressen sinnigerweise Big-Endian.

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann ist der AVR in einem Zwiespalt.
Einerseits werden Rücksprungadressen in Big-Endian auf den Stack (SRAM)
geschrieben und andererseits werden die 16 Bit Pointer-Register X, Y und
Z im Little-Endian verwendet
 ldi zl,low(...)  (r30)
 ldi zh,high(...) (r31)
oder die sind im Zusammenhang mit LD, LDD, ST oder STD andersrum
verschaltet.
Zusätzlich wird man von den APP-Notes noch dazu bewegt, alles im
Little-Endian zu machen.
Einen einheitlichen Standard, so rum für alles, gibts wolh nicht.

Wie dem auch sei, mir ging es eigentlich nur um die Darstellung des
Databereiches als 16 Bit Decimal ob man da was umdrehen kann.

Gruß
Andi

Autor: Christian Zietz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für den Flash gibt's im Kontextmenü die Option "Swap Bytes", die
genau das macht. Um die auch für den RAM freizuschalten, müsste man
AVRStudio.exe patchen (sind nur 4 Bytes).

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das gerade für den Program-Bereich ausprobiert und genau so was
habe ich gesucht.
Wie geht der Patch, das es auch für den Data-Bereich geht?
Habe AVR-Studio 4.11 Build 401.

Gruß
Andi

Autor: Christian Zietz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Andi: Ich habe leider noch eine ältere Version. Trotzdem hast Du Post.

Autor: Christian Zietz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Möglicherweise wollen auch andere Leser den Kontextmenü-Befehl "Swap
bytes" im Memory-Fenster auch für SRAM, Register und EEPROM
freischalten. Daher hier noch einmal öffentlich.

Zuerst der Disclaimer: Mit dem Patchen der Datei AVRStudio.exe verletzt
man Rechte von Atmel. Das Patchen geschieht komplett auf eigenes Risiko,
ich komme für evtl. juristische Folgen, Datenverlust, Fehlfunktionen
etc. nicht auf.

Gepatcht werden muss AVRStudio.exe:

Adresse    Byte alt    Byte neu

AVR-Studio 4.10, Build 356
00080C61:  75          90
00080C62:  26          90
00080FD4:  75          90
00080FD5:  2E          90

AVR-Studio 4.11, Build 401
00081661:  75          90
00081662:  26          90
000819D4:  75          90
000819D5:  2E          90

Christian

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bedanke mich hier auch bei Christian für seine Hilfe was ja schon per
Mail geschah.
Habe mir heute (gestern) die neueste Version AVR-Studio 4.11 SP2 Build
406 heruntergeladen und bin der Sache genauer auf den Grund gegangen.
Man muß mit einem HEX-Editor folgender maßen vorgehen um die Funktion
"Swap Bytes" für alle Bereiche freizuschalten:
1. Suchen nach der HEX-Kolonne (4 Bytes) 75 26 8A 87.
2. 75 26 ändern in 90 90.
3. Suchen nach der HEX-Kolonne 75 2E 8A 87.
4. 75 2E ändern in 90 90.

Die oben genannten HEX-Kolonnen gibt es jeweils nur ein mal in der
kompletten AVRStudio.exe.

MfG
Andi

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.