GCC: -ffunction-sections verändert Programmlogik - warum?

Gast #1973857
Lesenswert?

Eine Frage zur Wegoptimierung von ungenutzten Funktionen durch den 
Linker:

Ich wollte die Optimierung zum Entfernen von unbenutzten Funktionen
aktivieren (vgl. 
http://www.mikrocontroller.net/articles/GCC:_unbenutzte_Funktionen_entfernen)

Auf dem ATXMEGA256A3 hat sich die Codegröße danach von 150kByte auf 
120kByte
verringert. Ich bin über die 20% Reduktion erstaunt, da ich nicht 
meinte, dass so viele Funktionen ungenutzt sind. Die Firmware läuft aber 
nach der Optimierung nicht mehr richtig, das Verhalten ist gestört. Eine 
kurze Überprüfung hat ergeben, dass das main() und (oberflächlich 
angeschaute) ISRs noch da sind und auch angesprungen werden. Hat jemand 
eine Idee oder eine ähnliche Situation im Hinterkopf oder gibt es 
vielleicht ein bekanntes Problem?

Danke Euch schon im Vorraus
Marcel
Moderator Persönliche Seite #1974302
Lesenswert?

Peter Dannegger schrieb:
> Bei agressiver Optimierung ist zu beachten, daß alle Zugriffe vom Main
> auf Interruptvariablen grundsätzlich als volatile erfolgen müssen.

Das sollte sich aber zwischen -ffunction-sections/--gc-sections
und normaler Optimierung nicht unterscheiden.

Nein Marcel, sorry fürs Noch-nicht-Beantworten der Mail, ich habe
da auch keine Idee, ohne dass man den Kram komplett analysiert.
Gast #1980201
Lesenswert?

> Ich bin über die 20% Reduktion erstaunt, da ich nicht
> meinte, dass so viele Funktionen ungenutzt sind.

Schau doch mal das Endergebnis mit nm an nd ob da Funktionen fehlen, von 
denen du sicher bist, dass sie eigentlich aufgerufen werden müssen.

> Die Firmware läuft aber nach der Optimierung nicht mehr richtig,
> das Verhalten ist gestört.

Könnte daran liegen, dass möglicherweise einige Funktionen jetzt nicht 
mehr inline aufgerufen werden und damit mehr Stack gebraucht wird und 
sich das Timing natürlich auch etwas ändert. Aber alles nur geraten...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren