www.mikrocontroller.net

Forum: Compiler & IDEs (*((volatile unsigned long *)0x400043FC))


Autor: Bassel D. (newmcu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe neuerdings ein EVK-LM3S8962 von Texas Instruments gekauft und
möchte ich das µC-Programmieren lernen. Ich habe C-Programmierung als
Anwendung gelernt, aber solche Form von Zeiger
#define GPIO_PORTA_DATA_R       (*((volatile unsigned long
*)0x400043FC))

habe ich nie gehabt. Diese (*((volatile unsigned long *)0x400043FC))
Form findet man in der Header Datei vom µC. Ich verstehe leider nicht,
wie ich GPIO_PORTA_DATA_R benutzen soll. Ist GPIO_PORTA_DATA_R ein
Zeiger oder eine Variable?
kann es mir bitte jemand erklären oder ein Literatur-Tipp geben. Ich
habe  lange im Netz gesucht, aber leider ohne Erfolg.

Danke in Voraus
newmcu

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GPIO_PORTA_DATA_R kann benutzt werden wie eine Variable
vom Typ volatile unsigned long, die an der Stelle
0x400043FC im Speicher liegt.

Autor: Bassel D. (newmcu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke der schnellen Antwort ,aber bitte was bedeuten die Sternen(*)?

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zeiger

Der Stern im volatile unsigned long* macht aus dem Typ
"volatile unsigned long" einen "Zeiger auf volatile unsigned long",
die Klammern um den Typ volatile unsigned long* machen aus dem
nachfolgenden Wert 0x400043FC den gleichen Wert, aber mit dem
Typ in Klammern, also "Zeiger auf volatile unsigned long mit dem
Wert 0x400043FC" (das nennt sich cast)
und der * vorne sagt, daß über den Zeiger auf den Wert zugeriffen
werden soll.

Sowas steht aber in jedem C-Buch.

Autor: Stephan W. (sir_wedeck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das ist eigentlich ganz einfach:

Du hast im MC Bereiche die den Speicher und die Peripherie abbilden.
Diese ist eine Adresse im Speicher der auf den GPIO Bereich zeigt.

0x400043FC

um darauf zuzugreifen muss man den Compiler dies kenntlich machen.
mit (volatile unsigned long *)0x400043FC !

So, nun kommt es auch vor das du diese Register auch direkt bearbeiten 
willst und dafür brauchst du den Inhalt der Speicherzelle.
(*((volatile unsigned long *)0x400043FC))
Um nicht jedes mal so eine komische Zahl im Code zu nutzen, nimmt man 
ein define und vergibt Aussagekräftige Namen: GPIO_PORTA_DATA_R
Ich nehme mal an das hier das _R für READ steht, da ich deinen MC nicht 
kenne.

Im Code kannst du dann folgendes verwenden (vermutlich):
if (GPIO_PORTA_DATA_R == 0x03)
{
 // mach was wenn PIN 0 und 1 gesetzt sind
 :
}

schau dir mal den Speicheraufbau deines MCs im Datenblatt genauer an, da 
wirst du den RAM, FLASH und die Peripherie finden.

Stephan

Autor: Bassel D. (newmcu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,
ich weiß was cast ist, aber was mich verwirrte, wie jeder Anfänger sind 
die Zeiger im cast. besonders der Stern, der Anfang steht. In mein C 
Buch habe ich so was nicht gibst du mir bitte einen Literatur-Tipp.
Danke Sehr

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In JEDEM C-Buch (außer deinem natürlich) werden Zeiger behandelt,
und ich gehe jede Wette ein, daß da auch Sternchen stehen :-)

Die Sternchen verweisen in C-Büchern übrigens meistens nicht auf 
Fußnoten!

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil drum gebeten wurde:

Literaturtip:

Brian Kernighan & Dennis Ritchie: "Programmieren in C", zweite Auflage, 
Hanser-Verlag.

Autor: Bassel D. (newmcu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke sehr, ich habe es kapiert.
du hast recht R steht für Read. und ich bin dabei die Header Datei zu 
lernen um die Register kennenzulernen.
die Datenblätter habe ich schon teilweise gelernt.
danke noch mal

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bassel Daou schrieb:
> Danke sehr, ich habe es kapiert.
> du hast recht R steht für Read. und ich bin dabei die Header Datei zu
> lernen um die Register kennenzulernen.

Dann kümmere dich nicht weiter darum, was bei den #define dabeisteht.

Für dich wichtig ist das Datenblatt. Dort haben die Register einen 
Namen. Und es wird eine Systematik geben, wie diese Namen in die #define 
Namen überführt wurden. Diese Systematik ist für dich wichtig.

Autor: Rolf Magnus (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bassel D. schrieb:

> ich weiß was cast ist, aber was mich verwirrte, wie jeder Anfänger sind
> die Zeiger im cast. besonders der Stern, der Anfang steht. In mein C
> Buch habe ich so was nicht gibst du mir bitte einen Literatur-Tipp.

Der Stern vor einem Zeiger ist eine Dereferenzierung. Damit bekommt man 
nicht den Wert des Zeigers selbst, sondern den Wert des Objekts, auf das 
er zeigt. Ich kann mir aber beim besten Willen nicht vorstellen, daß das 
nicht in deinem C-Buch steht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.