Hallo, es gibt ja die Pointer-Register(beim ATMega32 zumindest X, Y und Z). Kann man sich solche Pointer selber definieren? Ich meine das so, das ich bspw. die Register R20 und R21 hernehme und daraus ein Pointer erstelle. Die Funktionalität sollte dann so sein wie bei standardmäßigen Pointern, sprich wenn das Low-Register nach einer Erhöhung "überläuft", dass dann automatisch das High-Register erhöht wird. Danke für jeden Tipp. -- Gruß Scotty
Karsten Sosna schrieb: > es gibt ja die Pointer-Register(beim ATMega32 zumindest X, Y und Z). > Kann man sich solche Pointer selber definieren? Nein > Ich meine das so, das > ich bspw. die Register R20 und R21 hernehme und daraus ein Pointer > erstelle. Die Funktionalität sollte dann so sein wie bei standardmäßigen > Pointern, sprich wenn das Low-Register nach einer Erhöhung "überläuft", > dass dann automatisch das High-Register erhöht wird. Du kannst dir natürlich ein Makro bauen, welches das erledigt. Ist ja auch nicht weiter tragisch zu realisieren, zumal ja der AVR Assembler die Instruktion ADIW für kleine Konstanten zur Verfügung stellt. Allerdings: den wesentlichen Vorteil der Pointer Variablen, indirekte Zugriffe realisieren zu können, kriegt man damit nicht.
> Allerdings: den wesentlichen Vorteil der Pointer Variablen, indirekte > Zugriffe realisieren zu können, kriegt man damit nicht. Hallo Karl Heinz, das habe ich mir schon fast gedacht. Na dann muss ich das anders realisieren, mir fehlt nämlich genau ein Pointer. Da muss ich halt ein paar mal mehr pushen und popen. -- Gruß Scotty
Hi Ich kenn zwar deinen Code nicht, aber schau mal nach, ob du nicht fehlende Adressregister damit erschlagen kannst, indem du einen Offset benutzt..
1 | Z.B. LDS Cnt_Reg, 55 ; Größe der Tabelle |
2 | LDS Dis_Reg, Distanz ; Abstand der Tabellen -1 |
3 | LDI Zero_Reg, 0 |
4 | LDI ZH,High(Tabelle_1) ; Anfang Tabelle |
5 | LDI ZL,Low(Tabelle_1) ; Adresszeiger auf 1. Kanal |
6 | Loop_Dec: ; Schleife zum übertragen |
7 | LD Temp, Z+ ; laden und erhöhen |
8 | Push ZH |
9 | Push ZL |
10 | ADD ZL, Dis_Reg ; Abstand auf die Adresse addieren |
11 | ADC ZH, Zero_Reg |
12 | ST Z, Temp |
13 | POP ZL |
14 | POP ZH |
15 | DEC Cnt_Reg |
16 | BRNE Loop_Dec |
So kommst du für eine Kopierfunktion mit nur einem Adressregister aus.... Gruß oldmax
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.