www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik program counter


Autor: Christian R. (christian_r)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage zum program counter.
Wo befindet sich dieses Register?
Liegt es auch im SRAM, wie z.b. das Statusregister?
Ich spreche übrigens vom Atmega32.

Vielen Dank!

Gruß
Christian

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Christian R. (christian_r)

>ich habe eine Frage zum program counter.
>Wo befindet sich dieses Register?

in der CPU.

>Liegt es auch im SRAM, wie z.b. das Statusregister?

Das kommt auf den Prozessor an. Wenn du den AVR meinst, dann nein. Die 
Steuerregister liegen im IO-Bereich. Siehe SFR im Artikel Speicher.
Schau mal im Datenblatt unter SPL, und SPH nach.

MfG
Falk

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim AVR kommt man gar nicht* an den Programmcounter (d.h. der liegt in 
keinem Adressbereich).

hth, Jörg
*)
-(R)CALL legt aber die aktuelle Position auf den Stack, falls es um die 
geht
- ICALL/IJMP springt an die adresse im Z-Pointer, so kann man den 
Programcounter manipulieren

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Programmcounter ist garnicht zugreifbar beim AVR.
Das ist auch niemals nötig.
Der Assembler/Compiler startet einfach an Adresse 0x0000 und zählt dann 
die Befehle mit.
Er weiß also jederzeit genau, wo er sich befindet und kann damit z.B. 
Sprünge berechnen.
Befehle können sich auch nicht vertauschen, sie bleiben immer an der 
zugewiesenen Adresse stehen.

Ein Programm muß also nirgends den Programmcounter auslesen.


Peter

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Der Programmcounter ist garnicht zugreifbar beim AVR.

Macht jeder jmp-Befehl.

MfG Spess

Autor: Jörg G. (joergderxte)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peda:
War der Tipp nicht sogar von dir, dass man (r)call benutzen kann, um 
"wilde" Interrupts zu ermitteln, so à la:
;Interruptvectors
rjmp main
rcall ungenutzter_handler
;...
ungenutzter_handler:
    pop sicheres_reg0 ;) Reihenfolge ungetestet
    pop sicheres_reg1
    ; adresse ausgeben/-lesen
 Aber insgesamt gibt's nicht viele Gründe, beim AVR den Programcounter 
zu lesen.

hth, Jörg

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.