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


von Hannes (Gast)


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

von Michael U. (amiga)


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

von Peter D. (peda)


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

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.