Forum: Compiler & IDEs cygwin: Ändern der default int size möglich?


von Mark Schau (Gast)


Lesenswert?

Hallo,

ich habe einen komplexeren Code für Dateisysteme unter cygwin auf dem
PC getestet, um ihn dann anschliessend auf dem AVR zu benutzen.

Leider rechnet cygwin mit 32-bit default int size, der avr-gcc mit
16-bit. Dadurch habe ich schon einen versteckten Fehler produziert.

Nun möchte ich nicht den ganzen Code nach möglichen weiteren Fehlern
durchsuchen, sondern möglichst den cygwin gcc (V3.2) auf 16-bit default
arithmetik umstellen.

Weiss jemand ob das möglich ist und wie das geht?

Optionen wie:
-mshort
-mno-int16
-mint16
funktionieren leider nicht. Meine erste google Suche war erfolglos...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das wäre eine 16-Bit-Portierung des x86-gcc (und hat mit cygwin nichts
zu tun). Soweit ich weiß, gibt es derartiges nicht. Gcc ist von der
Grundveranlagung her ein 32-Bit-Compiler und wurde nur für einige
Microcontroller "geschrumpft".

Abhilfe wäre die Verwendung eines anderen 16-Bit-x86-Compilers, wie
beispielsweise Borland C++ 3.1 oder älter.

Allerdings sind diese Compiler i.d.R. recht "angestaubt", was
bedeutet, daß sie weder C99 noch neuere C++-Funktionalität kennen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sinnvoller wäre es, Datentypen mit exakter Größe (uint16_t
usw.) zu benutzen.

von Mark Schau (Gast)


Lesenswert?

Ich benutze natürlich Datentypen mit exakter Größe wie uint16_t,
uint32_t. Das Problem ist, dass z.B:

  tmp32=nr_of_cluster_u16*FAT_BITS_u8;

auf einem 16-bit gcc ein anderes Ergebnis als mit einem 32-bit gcc
ergibt. (hier multiplikation 16-bit mit 8-bit, Ergebnis in 32-bit)

Erst explizites casten führt zum gleichen Ergebnis auf beiden
Compilern:
  tmp32=(uint32_t)nr_of_cluster_u16*(uint32_t)FAT_BITS_u8;

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ja, das ist genau das, was man dann tun muss, um portabel zu
bleiben.  Da es genügt, wenn einer der Operanden diesen Typ
hat, kann man auch FAT_BITS_u8 so definieren, dass es bereits
den Typecast enthält.

von A.K. (Gast)


Lesenswert?

Ein C++ Compiler, der auf recht aktuellem Stand ist, und immer noch
16bit-Code für DOS und Win3.1 erzeugen kann:
http://www.digitalmars.com.

von Rolf Magnus (Gast)


Lesenswert?

http://www.openwatcom.org wäre vielleicht auch eine Alternative.

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.