C Anfängerfrage

Gast #1114805
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
Gast #1114833
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.
Gast #1114841
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.
Gast #1125726
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren