Hallo! Ich habe eine Frage zu dem unten stehenden C-Code-Fragment. Und zwar was genau das Schlüsselwort "code" in den jeweiligen Zeilen bedeutet. Vielen Dank für jede Hilfe im Voraus! extern code Tabelle unsigned int code *z; z = (unsigned in code *)&Tabelle; Seite 3
Ich wuerde mal sagen das ist entweder grottenschlechter Stil (falscher Gebrauch des Preprozessors) oder da Fehlen die Kommentarzeichen... und selbst wenn das nen Art Datentyp sein soll, beim extern koennte das ja auch aufgehen - auch wenn das abschliessende semikolon fehlt. Aber "unsigned in code" was soll das fuer nen Krampf sein bittesehr...?
Du solltest dazusagen, für welchen Prozessortyp das geschrieben ist. So kann ich nur raten, daß es bedeutet, daß die betreffenden Variablen im Code-Segment angelegt werden sollen.
C51 C Compiler? Dort bedeutet es, dass die betreffende Variable in einem bestimmten Segment liegt. http://www.esacademy.com/automation/docs/c51primer/c51prim.htm
extern code Tabelle unsigned int code *z; z = (unsigned int code *)&Tabelle; Geschrieben ist das ganze für einen 8051-basierten Micrcontoller und soll von einem Keil-Compiler übersetzt werden Bei Tabelle handelt es sich soweit ich weiß um eine in Assembly geschreibenen Funktion
Atmel verwendet in einigen Beispielcodes die Datei compiler.h Dort wird code als __flash definiert (#define code __flash). Das bedeutet, dass die Tabelle im Flash gespeichert wird um RAM zu sparen. mfg
> unsigned int code *z; OK jetzt macht's schon mehr Sinn. > Atmel verwendet in einigen Beispielcodes die Datei compiler.h > Dort wird code als __flash definiert (#define code __flash). > Das bedeutet, dass die Tabelle im Flash gespeichert wird um RAM zu > sparen. Gut zu wissen...
Beim Keil heisst das "code", dass der int z im Flash liegt. z ist dann aber konstant und im laufendem Programm nicht mehr veränderbar.
Thomas B. wrote: > Beim Keil heisst das "code", dass der int z im Flash liegt. z ist dann > aber konstant und im laufendem Programm nicht mehr veränderbar. Ne, beim Keil C51 kann man memory specific pointer angeben: > unsigned int code *z; bedeutet, daß z ein Zeiger auf unsigned int im Code-memory ist. z selber ist natürlich veränderbar, sonst würde ja die nachfolgende Zuweisung nicht klappen, d.h. z ist im RAM oder in Registern. Peter
Eine gute Beschreibung findet sich hier: http://www.keil.com/support/man/docs/c51/c51_extensions.htm Kapitel "Pointers" Gruß, Robert
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.