www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Doppelregister(Pointer)


Autor: Karsten Sosna (scottyrebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Karsten Sosna (scottyrebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Martin Vogel (oldmax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Ich kenn zwar deinen Code nicht, aber schau mal nach, ob du nicht 
fehlende Adressregister damit erschlagen kannst, indem du einen Offset 
benutzt..
Z.B.     LDS  Cnt_Reg, 55           ; Größe der Tabelle
         LDS  Dis_Reg, Distanz      ; Abstand der Tabellen -1   
         LDI  Zero_Reg, 0  
         LDI  ZH,High(Tabelle_1)   ; Anfang Tabelle
         LDI  ZL,Low(Tabelle_1)    ; Adresszeiger auf 1. Kanal
   Loop_Dec:            ; Schleife zum übertragen 
         LD   Temp, Z+          ; laden und erhöhen
         Push ZH
         Push ZL
         ADD  ZL, Dis_Reg          ; Abstand auf die Adresse addieren
         ADC  ZH, Zero_Reg
         ST Z, Temp
         POP ZL
         POP ZH
         DEC Cnt_Reg
    BRNE Loop_Dec

So kommst du für eine Kopierfunktion mit nur einem Adressregister 
aus....
Gruß oldmax

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.