ARM Thumb-Modus: Code Größe nicht abnehmend
-
29-09-2019 - |
Frage
Jungs,
Ich habe ein Projekt, das ich für den ARM Cortex-A8-Prozessor zusammengestellt. Ich mache Gebrauch von GCC, dies zu tun. Derzeit ist die Größe meiner ausführbar ist 220,1 KB. Jetzt habe ich meine Make-Datei ändern und ich füge hinzu, die die Flagge -mthumb
, die Make-Datei Zeile sieht etwa so -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
Ich tue dies Veränderungen in allen meinen Makefiles und ich baue mein Projekt, aber die ausführbar ich schließlich noch erhalte weiterhin von 220,1 KB sein.
Ich habe eine weitere Änderung an meine Befehlszeile, fügte ich die -mthumb-Zusammenwirkungs Option
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
Wieder einmal ich das gleiche Größe ausführbare 220,1 KB bekommen. Bin ich etwas fehlt, während dies zu tun?
Ich schrieb ein kleines Programm, die kleinsten von zwei Zahlen zu finden und ich es mit der folgenden Befehlszeile kompilierte
gcc main.c -o main
Ich erhalte eine 8,5 KB ausführbare
Als nächstes ich eine
gcc -mthumb main.c -o main
ich noch ein 8,5 KB ausführbare erhalten.
Was ist hier falsch?
Ich habe eine cat /proc/cpuinfo
zu sehen, ob Daumen wirklich von meinem Prozessor unterstützt wird, und ich sehe, dass es in der Tat unterstützt wird.
Ich erhalte -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
Lösung
ich denke, -marm Mittel ein Arm ohne Daumen haben, versuchen zu entfernen -marm.
Andere Tipps
Es ist schwer zu sagen, ohne den eigentlichen Code zu haben, aber ich habe ein paar Vorschläge.
- Aktivieren Optimierungen. (Z.B. -O3 -ffunction Schnitte -fdata Schnitte)
- Isolieren Sie die ausführbare Datei sicher, dass die Debug-Informationen gezählt wird nicht zu machen.
- überprüfen Sie die eigentliche Code (.text) Größe, nicht die Dateigröße. Vielleicht gibt es einige padding geht. Sie können für diese Verwendung objdump.
- Dump den Assembler-Code (-S-Schalter) und prüfen, ob es tatsächlich ARM-Anweisungen in einem Fall und Daumen in einem anderen produziert.
Bei einigen Compilern Daumen ist die Standardeinstellung, wenn für ARMv7 kompilieren. Sind Sie sicher, dass Ihre ursprüngliche ausführbare Datei nicht auf Daumen gebaut wurde?
Versuchen Sie, mit MnO-Daumen Aufbau und sehen, ob die Codegröße erhöht.