mikrocontroller.net

Forum: Compiler & IDEs Ärger mit Update von WINAVR-Compiler


Autor: Hannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist es Euch auch schon so passiert?

Ich musste heute den ganzen Tag damit zubringen, ein älteres Programm 
mit neuem Compiler zum Laufen zu kriegen.

Hatte vom 2006er WINAVR auf die akltuelle Version upgedatet.

Klar, dass Strings nun char* sein müssen und unsigned char* nicht mehr 
akzeptiert wird, habe ich schnell rausgefunden. Soweit, sogut. Muss ja 
alles ANSI-mässig sein.

Trotzdem lief alles nur noch fehlerhaft.

Es mussten dann nämlich auch einige Variablen volatile deklariert 
werden, die vorher nicht volatile waren.

yebemptipicko!

Das muss man erst mal finden.

Hannes

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Hannes schrieb:
> Ist es Euch auch schon so passiert?
>
> Ich musste heute den ganzen Tag damit zubringen, ein älteres Programm
> mit neuem Compiler zum Laufen zu kriegen.
>
> Hatte vom 2006er WINAVR auf die akltuelle Version upgedatet.
>
>...
> Trotzdem lief alles nur noch fehlerhaft.
>
> Es mussten dann nämlich auch einige Variablen volatile deklariert
> werden, die vorher nicht volatile waren.
>...
> Das muss man erst mal finden.

Sagen wir es doch einfach so: die Fehler speziell mit dem fehlenden 
volatile waren eben drin im Programm. Schon immer. Nur hat der alte 
Optimizer da eben zufällig passend übersetzt.

Variablen, die in ISR verändert und außerhalb der ISR genutzt werden, 
müssen volatile sein, um dem Compiler zu sagen, daß die eben außerhalb 
seiner Programmsicht geändert werden und er sich gefälligst immer den 
aktuellen Stand zu besorgen hat.

Natürlich passiert sowas mit alten Sourcen schonmal. Hat man eben einen 
Grund, endlich die alten Fehler zu begradigen. ;-))

Gruß aus Berlin
Michael

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die meisten volatile-Probleme beruhen auf das unerwartete Inlining von 
Code.
Dadurch wird eine Funktion, die vorher abgeschlossen war, nun in die 
Optimierung des Aufrufers einbezogen und wenn der ne Schleife macht, 
dann wars das.
Das Compiler-Inlining vergrößert in der Regel den Code merklich, daher 
sollte man es abschalten:

-fno-inline-small-functions

Dann sollte auch alte Programme wieder gehen.

Leider sind nicht alle negativen Optimierungen abschaltbar.


Peter

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.