mikrocontroller.net

Forum: PC-Programmierung C Anfängerfrage


Autor: Nicole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich bin noch so ziemlich Anfängerin in Sachen C.
Ich habe grad eine Aufgabenstellung, mit der ich einfach
nicht weiterkomme:

Frage:
Worin besteht der Unterschied bei der Definition eines Symbols?
...
#define CAN_CTL_STAT *(unsigned int volatile sdata *) 0XEF00;

und
...
sfr CAN_CTL_STAT = 0XEF00;


Weiß vielleicht jemand von Euch, worin der Unterschied besteht oder
wo ich was hilfreiches finden kann??

Liebe Grüße
Nicole

Autor: Jaecko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die 2 Zeilen haben eigentlich wenig miteinander zu tun:

#define CAN_CTL_STAT *(unsigned int volatile sdata *) 0XEF00;

Der Compiler durchsucht den Quelltext. Überall wo er
"CAN_CTL_STAT" findet, tauscht er das gegen
"*(unsigned int volatile sdata *) 0XEF00" aus.


sfr CAN_CTL_STAT = 0XEF00;

Erstellt eine Variable CAN_CTL_STAT vom Typ sfr und weist der den Wert 
0xEF00 zu.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicole wrote:
> Frage:
> Worin besteht der Unterschied bei der Definition eines Symbols?
> ...
> #define CAN_CTL_STAT *(unsigned int volatile sdata *) 0XEF00;
Das ist für den Präprozessor. Der klappert alle Quelldateien ab und 
führt simple Textersetzungen durch, und gibt danach sein Resultat an den 
Compiler weiter.
Textersetzungen sind z.B. #include-Direktiven (der Präprozessor kopiert 
den Inhalt der entsprechenden Datei ins Resultat) oder eben 
#define-Direktiven. In deinem Fall wird er überall, wo er CAN_CTL_STAT 
findet, dieses durch '*(unsigned int volatile sdata *) 0XEF00;' ersetzen 
(außer in Strings).

Das Semikolon gehört dahinter übrigens nicht hin.


> sfr CAN_CTL_STAT = 0XEF00;
Das gehört nicht zum C-Standard, vermutlich eine Erweiterung deines 
Compilers --> Handbuch.
Deine C-Bibliothek könnte z.B. einen Datentyp 'sfr' erzeugen, oder aber 
es ist eine echte Spracherweiterung.

Autor: hust (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SFR = Special Function Register

Würd mal sagen das es hier um nen µC geht. Zumindest funktioniert das 
auf dem 8051 den ich grad Programmier genau so.

Und wenn ich jetzt nicht ganz daneben liege, wird da einer Variablen 
eine Adresse zugewiesen, die irgendwo im Speicher ein Register 
darstellt. (Dem Namen nach zu Urteilen gehts wohl um den CAN Bus und 
irgendeinen Zustand)

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.