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
> 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.
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
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
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.