Ich werde einige Firmwares für Cortex-M-Cores auf STM32-Prozessoren entwickeln, die C für meine Projekte verwenden, und im Web suchen Ich habe eine Menge verschiedener Compiler gefunden: Keil, IAR, Linaro, Yagarto und GNU-Tools für ARM-Embedded-Prozessoren .
Ich habe mich gefragt, welche funktionalen Unterschiede zwischen diesen Compilern bestehen, die meine Wahl beeinflussen könnten? Zum Beispiel brauche ich als Enthusiast keine Unterstützung oder Hilfe vom Verkäufer, und eine Begrenzung der Code-Größe ist im Moment in Ordnung. Auch die Benutzerfreundlichkeit ist kein Hauptproblem, da ich gerne lerne (und für den Moment habe ich sowohl Keil Lite als auch Eclipse mit GNU ARM konfiguriert und funktioniert).
Ist der generierte Code in Bezug auf Größe / Geschwindigkeit so unterschiedlich zwischen diesen Compilern? Gibt es eine Vergleichstabelle? (Ich habe nur veraltete Informationen im Web gefunden)
Benchmarking ist eine Kunstform an sich, in der Regel einfach zu manipulieren, um zu zeigen, was Sie wollen. Ich würde nicht erwarten, dass die Compiler dieselben Ergebnisse mit Ausnahme von sehr kleinen Testfällen erzeugen, und manchmal sind ihre Ergebnisse in diesen kleinen Testfällen identisch oder manchmal sehr unterschiedlich, da Ihr Test eine Optimierung, die ein Compiler kennt / verwendet, und eine andere nicht.
Früher habe ich solche Dinge (Compiler-Performance-Nummern) zum Beispiel mit dhrystone im Auge behalten, aber bei bekannten Benchmarks (nicht, dass dhrystone viel mehr bedeutet, sondern andere), stellen Sie vielleicht fest, dass einige Compiler sich selbst abstimmen Gut unter Benchmarks vielleicht auf Kosten von etwas anderem.
Es gibt keine richtige Antwort, es gibt kein universelles "Bestes", es liegt alles im Auge des Betrachters, du. Welches Werkzeug ist einfacher für Sie, was gefällt Ihnen besser, sei es für die GUI oder schöne Farben oder Soundkartensounds oder was auch immer. Und geh von dort.
Der gnu-Compiler im Allgemeinen für Anwendungen, die ich getestet habe, produziert keinen Code als "schnell", was mein Benchmark ist, verglichen mit den anderen, aber es gibt viel mehr Leute, die die kostenlosen gnu-Tools verwenden, deshalb ist die Unterstützung dafür wesentlich breiter zur Anzahl der Webseiten und Foren und Beispiele. gnu wird auch keine Größenbeschränkung haben, aber es kann mehr Lernaufwand oder was auch immer erfordern, um zum Laufen zu kommen ...
Die Cortex-ms sind in die armv6m und armv7m Familien unterteilt, die v6m (cortex-m0) haben nur eine kleine Anzahl von thumb2 Extensions, die armv7m haben etwa 150 thumbv2 Extensions zum Daumen, also müssen Sie wissen was Ihre Werkzeuge sind unterstützen und nicht die falschen Sachen auf dem falschen Chip verwenden. Dann können und werden die Compiler, wenn sie das alles wissen, unterschiedliche Befehlsmischungen aus demselben Quellcode erzeugen. Innerhalb des gleichen Compilers oder der gleichen Familie mit verschiedenen Befehlszeilenoptionen können / werden Sie erheblich unterschiedlichen Code erhalten. Und darüber hinaus mit einem Cortex-M4 mit Cache auf, wenn Sie einen mit so etwas haben, abhängig davon, wie der Code in den Cache-Zeilen liegt, können Sie sehr unterschiedliche Leistung erhalten, so Benchmarking ist ein Forschungsprojekt für jeden Blob von C-Code, den Sie benchmarken möchten. Der Leistungsbereich innerhalb eines einzelnen Compilers kann einen anderen Compiler überschatten oder die Überlappung kann ausreichen, um keine Rolle zu spielen.
Wenn Sie Zugang zu den Werkzeugen haben, die Sie beruflich wertvoll machen, indem Sie lernen, die konkurrierenden Werkzeuge zu verwenden und in einen Job und / oder in Ihren Job zu gehen, wählen Sie das, was Sie als das richtige Werkzeug für den Job sehen ein Kieler Haus und kann sofort arbeiten oder ein Gnu-Haus und sofort arbeiten. Wo Sie einen Job verlieren könnten, wenn Sie nur Gnu sind und der Job für ein Kieler Haus ist.
Wir haben einige Vergleiche angestellt; IAR und Keil übertreffen GCC normalerweise mit Standardeinstellungen. Aber mit einigen Compiler-Flags können Sie GCC dem Ergebnis von IAR und Keil ziemlich nahe kommen lassen.
Einige der genannten Compiler sind integrierte Entwicklungsumgebungen. Andere sind nur einfache Compiler. Manche Leute bevorzugen eine integrierte Umgebung mit Compiler, Editor und Debugger. Andere ziehen es vor, ihre eigene Umgebung einzurichten. Es ist Geschmackssache.
Zusätzlich zu Yagarto gibt es auch die "Code Sourcery" Distribution von GCC für ARM.