Ich habe ein Cortex-M3 Testprojekt im mbed compiler, das enthält ein
printf() und das FatFS von ChaN. Der mbed Online Compiler erzeugt 27,9
kB Code, der gcc 4.9.3 macht aus dem gleichen Projekt 38 kB, also über
10 kB mehr. Optimierung steht auf -Os, -O3 erzeugt gleich viel und
kleine Optimierungen noch mehr. Kann das sein das der online Compiler
(soll ein ARM compiler Version 5 sein) soviel besser optimiert? Oder
gibt es weitere Optimierungsschalter im gcc die man zusätzlich zu -Ox
setzen muss?
Wenn ich das Projekt nur mit einem SPI Ojekt erzeugt statt dem
Filesystem verringert sich die Grösse auf 18,5 kB, laut
http://elm-chan.org/fsw/ff/en/appnote.html sollte der Code für einen
Cortex-M3 10,6 kB gross sein, da liege ich also auch deutlich drüber.
Beim GCC wird normalerweise newlib als C Library verlinkt, die ist nicht
besonders klein. Aber schau mal in die Doku, eventuell ist auch newlib
in der nano version dabei, die ist deutlich kleiner (aber auch langsamer
und mit weniger Features IIRC).
Die NewlibNano ist auch eingestellt. Aber wo ich das gerade kontrolliert
habe sehe ich das ich noch 'printf float support' aktiviert habe. Ohne
bin ich jetzt bei 30,6 kB.
Nachtrag:
habe ein float in den Code reingepackt und im printf übergeben. Der Code
im Online compiler wird nicht grösser, bleibt bei 27,9 kB.
vom Online compiler bekomme ich kein mapfile, nur ein bin was direkt in
den Controller geladen wird. Das gcc mapfile habe ich schonmal
durchgesehen, das ist aber mühselig viel, jedenfalls nichts sehr
auffäliges.
Jojo S. schrieb:> Der mbed Online Compiler erzeugt 27,9> kB Code, der gcc 4.9.3 macht aus dem gleichen Projekt 38 kB,
Nimms leicht, es ist eben so. Der GCC hat noch nie besonders kompakten
Code erzeugt.
W.S.
habe mich gerade durch langen von Dr. Sommer verlinkten Thread gekämpft.
Die genannten Optimierungen waren schon eingeschaltet, auch die lto. Ich
finde nur den Unterschied von ca. 30 % recht drastisch, auch wenn die
Meinungen über die Optimierungsqualität vom gcc auseinander gehen.
W.S. schrieb:> Nimms leicht, es ist eben so. Der GCC hat noch nie besonders kompakten> Code erzeugt.
Und Pauschalisierungen sind grundsätzlich verkehrt.
Paul schrieb:> Aber> sei froh, dass du keinen M0 benutzt, da sieht's teilweise noch> schlechter aus.
Stimmt, da kommt die Frage auch ursprünglich her, ich spiele aber gerade
wieder mit meinem LPC1347 und habe versucht das da nachzuvollziehen.
http://developer.mbed.org/questions/61916/LPC1114FN28-mbed-online-vs-LPCXpresso/
Da gab es jetzt noch eine Aufklärung zum ARM-CC, ist wohl identisch mit
dem Keil. Ich habe die freie Version 5 mit dem 32k Limit, der (nicht)
erzeugte Code lag bei 35 kB. Mit den am Ende genannten Optimierungen
schrumpft der Code wie im Online Compiler auf ca. 28 kB. Die Mühe mit
der 4er Version habe ich mir nicht gemacht, das Projekt wurde auch vom
5er ohne Fehler kompiliert. Nur die Microlib erzeugt ein paar undefined
symbols, die habe ich auch wieder abgeschaltet, da könnte man also noch
mehr sparen.
Gut das der LPC1347 64 kB Flash hat, da kann ich noch ein bisschen beim
gcc bleiben.