www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bedeutung von C-Code


Autor: hemmes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das dürfte letztendlich irgendeneine compilerspezifische
Erweiterung sein.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C51 C Compiler?

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

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

Autor: hemmes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Josi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Thomas B. (detritus)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine gute Beschreibung findet sich hier:

http://www.keil.com/support/man/docs/c51/c51_extensions.htm

Kapitel "Pointers"

Gruß,
Robert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.