Forum: Mikrocontroller und Digitale Elektronik Bedeutung von C-Code


von hemmes (Gast)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

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...?

von Karl H. (kbuchegg)


Lesenswert?

Das dürfte letztendlich irgendeneine compilerspezifische
Erweiterung sein.

von Uhu U. (uhu)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

C51 C Compiler?

Dort bedeutet es, dass die betreffende Variable in einem bestimmten 
Segment liegt.

http://www.esacademy.com/automation/docs/c51primer/c51prim.htm

von hemmes (Gast)


Lesenswert?

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

von Josi (Gast)


Lesenswert?

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

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

> 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...

von Thomas B. (detritus)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Robert W. (rweber)


Lesenswert?

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