Forum: PC-Programmierung C Anfängerfrage


von Nicole (Gast)


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

von Jaecko (Gast)


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.

von Sven P. (Gast)


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.

von hust (Gast)


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)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.