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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.