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
"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
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
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.
> 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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.