www.mikrocontroller.net

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


Autor: Mark Schau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Mark Schau (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://www.openwatcom.org wäre vielleicht auch eine Alternative.

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.