Forum: Mikrocontroller und Digitale Elektronik Pointer auf Register


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Franz (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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))'.
uint8_t *Zeiger = &PORTB;

von Franz (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Alles klar, danke! :-)

von Johann L. (gjlayde) Benutzerseite


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

Nein, das Ziel muss auf jeden Fall volatile sein:

#include <stdint.h>

uint8_t volatile *pportb = &PORTB;

von Johannes M. (johnny-m)


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

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

von Stefan E. (sternst)


Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:
> Johann L. wrote:
>> Nein, das Ziel muss auf jeden Fall volatile sein:
>
>> #include <stdint.h>
>>
>> uint8_t volatile *pportb = &PORTB;
> 
> 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)


Bewertung
0 lesenswert
nicht 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...

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.