www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Fragen zu ATmega8 und Pointern


Autor: der unwissende (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also folgendes. In den tutorials liest man ja häufig über Pointer.

Bisher habe ich nur den Stackpointer genutzt und zwar mir push, pop, 
rcall und ret.
Sonst nicht.

Nun ließt man öfters von pointern und X,Y und Z Registern.
Da ist die Rede vom Z-Pointer etc....


Irgendwie verstehe ich das ganze nicht.
Ich habe Arbeitsregister in die ich Werte hineinkopieren kann.
Klar.
Aber wodrauf greifen diese Pointer zu?


Gibt es vielleicht eine Seite auf der ausführlich erklärt ist, wie das 
funktioniert, auf welche speicher diese zugreifen und wo einfache 
Anwendungsbeispiele dabei sind?

Ich würds gern verstehen habe aber keine gute Seite gefunden, wo das 
erklärt wird.
Vielleicht ists ja ganz einfach und schnell erklärt?


Danke für Hilfestellungen.

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: der unwissende (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, jo das habe ich mir schon durchgelesen, verstehs aber nicht richtig.
(Oder bin mir nicht sicher ob ichs richtig verstanden habe)
Also werden die Pointer nur genutzt um auf Speicherzellen zu zeigen?
Und 2x8Bit haben sie, weil man mit 8 bit ja nur 2^8 bit adressieren 
kann, neuere AVRs aber schon 2^16 haben?

Autor: Klugscheisser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bisher habe ich nur den Stackpointer genutzt und zwar mir push, pop,
>rcall und ret.

Genau. der Stackpointer zeigt auf eine Stelle im RAM aus denen er bei 
pop und ret Werte liest, bei call und rcall Werte schreibt. Soweit OK.


Analog geht es beim ATMEGA8 (und bei vielen anderen Modellen von Atmel) 
mit den sogenannten X, Y und Z Register. Das sind jeweils zwei 8-Bit 
Register die bei manchen Befehlen als 16 Bit Register betrachtet werden.
Es gibt Befehle die auf das FLASH als auch solche die auf das RAM 
zugreifen und dabei diese X, Y, und Z-Register benutzen. (Zusätzlich 
kommt bei grossem Speicher noch eines von zwei weiteren Zeigerregistern 
hinzu).
Siehe etwa LD, LDS ST, STS, für das RAM,  IJMP, ICALL, LPM für das 
Programm-Flash.

Ganz allgemein formuliert kann man damit auf Speicherstellen zugreifen 
die man bei der Programmerstellung noch nicht genau festlegen will Z.B. 
wenn man auf die Elemente eines Arrays zugreifen will. Dann würde man 
eines der Register X, Y, Z mit der Adresse des ersten Elementes laden 
und das Register dann immer entsprechend inkrementieren (oder auch 
dekrementieren).

Beim Flash geht das entsprechend und hat in der Harvard-Architektur 
einige Einschränkungen. Entweder kann man das FLASH garnicht oder nur 
indirekt über einen weiteren Befehl oder Ähnliches beschreiben. Oft 
angewendet wird aber die Methode eine Konstante aus dem Flash in ein 
Register zu laden. Hat man wiederrum ein Array von Konstanten geht das 
genau so wie oben beschrieben.

Schau Dir am besten mal die Beschreibung der Befehle LD, LDS ST, STS, 
für das RAM,  IJMP, ICALL und LPM an. Dann sollte es klarer werden.

Autor: Oliver D. (smasher)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke!

Hast du das jetzt selber geschrieben oder von einer website?

So eine erklärung fehlt doch in jedem avr tutorial (auch hier auf uC.net 
).

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.