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
@ 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
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
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
@peda: War der Tipp nicht sogar von dir, dass man (r)call benutzen kann, um "wilde" Interrupts zu ermitteln, so à la:
1 | ;Interruptvectors |
2 | rjmp main |
3 | rcall ungenutzter_handler |
4 | ;... |
5 | ungenutzter_handler: |
6 | pop sicheres_reg0 ;) Reihenfolge ungetestet |
7 | pop sicheres_reg1 |
8 | ; adresse ausgeben/-lesen |
Aber insgesamt gibt's nicht viele Gründe, beim AVR den Programcounter zu lesen. hth, Jörg
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.