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
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.
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
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
Dann werde ich wohl beim Little-Endian bleiben. Vielen Dank für eure Antworten! Gruß Andi
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
Auf dem Stack liegen Return-Adressen sinnigerweise Big-Endian.
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
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).
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
@Andi: Ich habe leider noch eine ältere Version. Trotzdem hast Du Post.
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.