Hallo, ich habe mir einen Bootloader geschrieben und möchte eine Verify-Funktion einfügen. Target: ATmega2561 Programm: Codevision GCC + Assembler Um Übertragungsfehler auszuschließen überprüfe ich jedes Byte einzeln bevor ich es in den temporären Seitenspeicher übergeben. Ist dieser nun vollständig gefüllt schreibe ist die Seite in das Flash des µC. Bevor ich nun die nächste Seite schreibe, möchte ich den beschrieben Flash an den PC zurück übergeben um diesen dann in meiner Software mit der Hexdatei zu überprüfen. Ich nutze dazu den LPM-Befehl. Beispiel: //Lade Z-Register 0x0000; LPM r2,z+; LPM r3,Z+; Nun sollte doch der Wert von Adresse 0x0000 in r2 stehen und Adresse 0x0001 in r1?
Daniel wrote: > Beispiel: > //Lade Z-Register 0x0000; > LPM r2,z+; > LPM r3,Z+; > > > Nun sollte doch der Wert von Adresse 0x0000 in r2 stehen und Adresse > 0x0001 in r1? Nö. Wenn Du was nach r3 schreibst, darf sich r1 doch nicht ändern. Peter
1 | .include "m8def.inc" |
2 | |
3 | ldi R16, 0xFF |
4 | mov R0,R16; |
5 | mov R1,r16; |
6 | out DDRB, R16 ; Port B: Ausgang |
7 | |
8 | ldi ZL, 0 ; Low-Byte der Adresse in Z-Pointer |
9 | ldi ZH, 0 ; High-Byte der Adresse in Z-Pointer |
10 | |
11 | |
12 | ende: |
13 | lpm R0,Z+ ; durch Z-Pointer adressiertes Byte |
14 | rjmp ende ; Endlosschleife |
15 | |
16 | daten: |
17 | .db 0b10101010 |
Wenn ich das nun simuliere funktionert es wie gewünscht. Aber in meinem Bootloader lese ich ständig den Wert 0xFF ein. Ich werde nn feierabend machen und das ganze am Montag analysieren. Da stimmt bestimmt etwas mit meinem Z-Pointer nicht.
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.