-
Register ansprechen ->
Hallo zusammen,
ich frage mich gerade, was eigetnlich genau passiert, wenn ich z.B. einen PORT auslese oder beschreibe.
Angenommen ich beschreibe PORTB würde ich das wie folgt machen:
Code:
PINB = 0x34; // oder ähnlich
Meine Frage ist eigentlich, was steckt hinter PINB
In iom32.h ist PINB wie folgt definiert:
Code:
#define PINB _SFR_IO8(0x16)
_SFR_IO8 ist in sfr_defs.h zu finden:
Code:
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
und ab diesem Punkt kann ich es nicht mehr nachvollziehen. Angenommen ich wüsste die Adresse von PORTB, könnte ich diesen dann direkt auslesen? Was genau macht der Compiler an dieser Stelle?
Danke!
Peter
-
Letztlich macht er genau das, was du oben angeführt hast.
Es ist das Bereich, in dem die "special-function-register" (SFR) sind, als basis definiert
(irgendwo steht noch "#define __SFR_OFFSET nnn " )
Das PortB ist offenbar in diesem Bereich an der Stelle 0x16
Also
1 PINB = 0x34
2 _SFR_IO8(0x16) = 0x34
3 ((0x16) + nnn) = 0x34
-
Danke Dir,
aber was genau macht der Compiler damit?
Da steht ja jetzt eigetnlich nur eine Zahl, also die 0x16 + offset der wir irgendeine andere Zahl zuweisen. Wie wird wird das jetzt umgesetzt?
Grüße,
Peter
-
Die Zahl versteht er als Adresse, d.h. er schreibt den wert 0x34 dorthin.