mikrocontroller.net

Forum: Compiler & IDEs GCC: -ffunction-sections verändert Programmlogik - warum?


Autor: Marcel W. (Gast)
Datum:

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

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

Autor: huch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Weiterhin ist darauf zu achten, dass der Linker den Startup-Code und 
die Interrupt-Vektoren nicht verwirft."

Hast Du das beachtet?

Bei Fragen, die Compiler/Linker betreffen, ist es sinnvoll die Version 
anzugeben.

Siehe http://www.mikrocontroller.net/articles/Netiquette

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei agressiver Optimierung ist zu beachten, daß alle Zugriffe vom Main 
auf Interruptvariablen grundsätzlich als volatile erfolgen müssen.

Sonst werden Zugriffe gnadenlos wegoptimiert oder aus der Schleife 
herausgezogen.

Hier mal ein Beispiel:
Beitrag "mehrere MC seriell über Datenbus verbinden (1Draht)"


Peter

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

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

Autor: Georg A. (Gast)
Datum:

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

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.