Ärger mit Update von WINAVR-Compiler

Gast #1555127
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
#1555298
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
#1555329
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.