Forum: Mikrocontroller und Digitale Elektronik Pointer auf Register


von Franz (Gast)


Lesenswert?

Hallo zusammen,

ich möchte einen Pointer auf PORTB erzeugen um dann darauf zugreifen zu 
können. Leider weiß ich nicht welcher Pointertyp auf ein SFR zeigt.

Danke für Eure Hilfe! :-)

von Johannes M. (johnny-m)


Lesenswert?

Franz wrote:
> ich möchte einen Pointer auf PORTB erzeugen um dann darauf zugreifen zu
> können. Leider weiß ich nicht welcher Pointertyp auf ein SFR zeigt.
Versuch's mal mit "volatile uint8_t".

von Sven P. (Gast)


Lesenswert?

Franz wrote:
> Hallo zusammen,
>
> ich möchte einen Pointer auf PORTB erzeugen um dann darauf zugreifen zu
> können. Leider weiß ich nicht welcher Pointertyp auf ein SFR zeigt.
>
> Danke für Eure Hilfe! :-)

Ein einfacher Zeiger, guck mal in die Header :-D
Da wird quasi einfach die Adresse als Literal hingeschrieben und 
dereferenziert, so nach dem Motto '#define PORTB  (*(0x1234))'.
1
uint8_t *Zeiger = &PORTB;

von Franz (Gast)


Lesenswert?

Alles klar, danke! :-)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sven P. wrote:
> dereferenziert, so nach dem Motto '#define PORTB  (*(0x1234))'.
>
>
1
> uint8_t *Zeiger = &PORTB;
2
>

Nein, das Ziel muss auf jeden Fall volatile sein:

1
#include <stdint.h>
2
3
uint8_t volatile *pportb = &PORTB;

von Johannes M. (johnny-m)


Lesenswert?

Johann L. wrote:
> Nein, das Ziel muss auf jeden Fall volatile sein:
1
> #include <stdint.h>
2
> 
3
> uint8_t volatile *pportb = &PORTB;
Ja, das Ziel. Bei Dir ist aber jetzt der Pointer volatile und nicht das 
Ziel...

Eher
1
> volatile uint8_t *pportb = &PORTB;
oder nicht?

von Stefan E. (sternst)


Lesenswert?

Johannes M. wrote:
> Johann L. wrote:
>> Nein, das Ziel muss auf jeden Fall volatile sein:
>
1
>> #include <stdint.h>
2
>>
3
>> uint8_t volatile *pportb = &PORTB;
4
>
> Ja, das Ziel. Bei Dir ist aber jetzt der Pointer volatile und nicht das
> Ziel...

Nein. Die Zeilen von Johann und dir sind äquivalent.
Für einen volatile Zeiger müsste das volatile rechts vom * stehen.

von Johannes M. (johnny-m)


Lesenswert?

Stefan Ernst wrote:
> Nein. Die Zeilen von Johann und dir sind äquivalent.
> Für einen volatile Zeiger müsste das volatile rechts vom * stehen.
Autsch, ja klar. Hatte mich auf die Schnelle tatsächlich verguckt. Das 
liegt daran, dass ich Typqualifizierer grundsätzlich vor den Typ 
schreibe.

Hätte mich auch gewundert, wenn ausgerechnet dem Johann da ein Fehler 
unterlaufen wäre...

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
Noch kein Account? Hier anmelden.