mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pointer auf Register


Autor: Franz (Gast)
Datum:

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! :-)

Autor: Johannes M. (johnny-m)
Datum:

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".

Autor: Sven P. (haku) Benutzerseite
Datum:

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;

Autor: Franz (Gast)
Datum:

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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

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;

Autor: Johannes M. (johnny-m)
Datum:

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?

Autor: Stefan Ernst (sternst)
Datum:

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.

Autor: Johannes M. (johnny-m)
Datum:

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.