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...
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.
Sinnvoller wäre es, Datentypen mit exakter Größe (uint16_t usw.) zu benutzen.
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;
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.
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.
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.