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
#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?
>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?
@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
... 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)
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
Die Infineon-Prozessoren aus der C166/C167 Familie haben ja auch einen Intel 286-Kern. Also kein Wunder. Gerhard
@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
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 ;-) )
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.