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


von Meyer (Gast)


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

von Rufus T. Firefly (Gast)


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?

von Jochen Pernsteiner (Gast)


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?

von T.Stütz (Gast)


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

von Rufus T. Firefly (Gast)


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)

von meyer (Gast)


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

von Gerhard Gunzelmann (Gast)


Lesenswert?

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

Gerhard

von T.Stütz (Gast)


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

von KoF (Gast)


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 ;-) )

von A.K. (Gast)


Lesenswert?

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

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.