www.mikrocontroller.net

Forum: PC-Programmierung ein Paar dumme Fragen zur eingebetteten C Programmierung


Autor: Meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich habe ein Paar Code gelesen. Da ich nur beim PC programmiert habe,
fällt mir schwer, solche Dinge zu verstehen.

1, pragma (z.B. #pragma combine fc=A0x0C10000)
  steht nicht in meinem C-Buch!

2, _far (z.B. volatile const _far int MQMAXN[2]={0x3c00,0x3C00};)
  hat das mit der Speicherzuweisung zu tun?

3, uword, uint32
  ich kann die gut verstehen, aber sind sie vom C-Standard?

4, huge (z.B. huge unsigned char *p1 = (huge unsigned char
*)CALROM_ADDR;)
  steht nicht in meinem C-Buch!

Soweit ich weiß gibt es keine eigentliche Unterschiede zw. ANSI C und
embedded C. Bitte nicht lachen!

Viele Grüße
Meyer

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#pragma ist eine compilerspezifische Erweiterung. Die steht daher aus
guten Gründen nicht im C-Buch, sondern in der Dokumentation des
jeweiligen C-Compilers, dem es ungenommen ist, das auf seine frei
individuelle Weise zu interpretieren.

_far ist ein "storage class specifier", der von
Microsoft/Borland/Intel zur Programmierung der segmentierten
Speicherverwaltung der x86-Prozessoren eingeführt wurde und besagt, daß
ein Pointer nicht nur aus dem Offset, sondern auch aus einer
Segmentadresse besteht.

uword, uint32 sind nicht Bestandteil von C89. Es kann aber sein, daß
vergleichbare Typen (uint8_t, uint32_t) als Bestandteil von C99
standardisiert sind. Da ich keinen C99-Compiler verwende, kann ich die
definitive Antwort nur den geneigten Kollegen überlassen, die sich
damit besser auskennen.

huge ist im Prinzip dasselbe wie far, nur wird hierfür zusätzlicher
Code erzeugt, der den Offsetanteil normiert, also auf Zahlenraum 0..F
beschränkt.

Also:
far/huge treten nur auf x86-Prozessoren auf.
#pragma ist jeweils ganz besonders compilerspezifisch und im Handbuch
nachzusehen.

Auf was für einem Prozessor/Controller möchtest Du mit welchem Compiler
arbeiten?

Autor: Jochen Pernsteiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es kann aber sein, daß vergleichbare Typen (uint8_t, uint32_t) als
>Bestandteil von C99 standardisiert sind.

Sind sie in der Tat. In der Headerdatei stdint.h wird man fündig.

>Da ich keinen C99-Compiler verwende

Benutzt Du nicht gcc?

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Rufus T. Firefly
Kannst du ja nicht wissen, aber der Keil-C Compiler
kennt für die C16x-Prozessoren das "huge" (Also nicht nur x86).
Damit ist es dann möglich per Arrayzugriff oder Zeigeroperation
mehr als 10000h Bytes zuzugreifen.

Mann kann nicht alles wissen ... :-)

Gruss

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... mit den Biestern habe ich mich glücklicherweise noch nie
herumschlagen müssen und also hab' ich auch verdrängt, daß auch die
über diese Hauterkrankung namens Segmentitis verfügen. Yuck!

(Ich bin erkennbar Freund linear adressierbaren Speichers)

Autor: meyer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich nutze CX167 und Tasking-C-Compiler. Im Handbuch von Tasking ist
_huge zu sehen, also mit einem Unterstrich. Das sollte verschieden zu
huge ohne Unterstrich, oder?

MfG
Meyer

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Infineon-Prozessoren aus der C166/C167 Familie haben ja auch einen
Intel 286-Kern. Also kein Wunder.

Gerhard

Autor: T.Stütz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Gerhard Gunzelmann
Wie bitte ??? Wo hast du den Sch*ß her ?
Zeig mir bitte einen 286 der
- Registerbänke kann
- 16 Register (16Bit)
- Bit-Adressierbaren Speicher
- internes RAM
- einen Befehl innerhalbn EINES Taktes ausführt.

Das glaube ich ohne Quellenangabe NICHT !

Gruss

Autor: KoF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mal eben ne kleine frage am rande.

wie sieht es eigentlich mit der ada unterstützung in den gcc`s aus?
im rahmen meiner ausbildung mußte ich in ada reinschnuppern. zu der
zeit habe ich es gehasst, da man sich echt wasserblasen beim
programmieren zugezogen hat (strenge typendefinierung), aber heute
misse ich genau diese des öfteren. (besonders dann, wenn man code von
dritten bekommt und erstmal nicht weiß, was der macht ;-) )

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ada: http://avr-ada.sourceforge.net/
Derzeit m.E. noch zu mager.

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.