Hinter Crossworks arbeitet die GNU Toolchain. Habe schon öfter Code für
IAR EWARM und Realview (die Toolchain hinter uVision) nach GNU portiert,
nur sehr selten von GNU->"kommerziell", hier also nur eine Kurzfassung
der Unterschiede:
- Startup-Code anpassen von GNU-Assembler nach Realview Assembler, die
Assembler-Anweisungen selbst kann man 1:1 übernehmen. Die
Assembler-Direktiven müssen angepasst werden. Falls der Startup-Code
nicht allzu komplex ist, dürfte es einfacher sein, auf Grundlage eines
Beispiels von Keil einen neuen Startup-Code zu schreiben.
- Das Memory-Layout in den uVision Dialogen anpassen. Normalerweise kann
man Standardeinstellungen verwenden (Startadresse Flash, Startadresse
RAM).
- Bei komplexem Memory-Layout müssen man die Einstellungen aus
Crossworks, mit denen im Hintergrund ein Linker-Script erzeugt wird so
in uVision übernommen werden, dass ein vergleichbares
"scatter-load-file" erzeugt wird bzw. eigene Scatter-Load-File vorgeben
(nie selbst ausprobiert, Keil Eval. unterstützt dies nicht).
- Interrupt-Handler anpassen, falls kein Assembler-Wrapper genutzt wird:
Bei Code für GNU erkennbar am attribute in der Funktionsdeklaration,
Portierung vgl. Realview Dokumentation __irq. Bei Assembler-Wrapper ist
nur der Wrapper zu portieren, C-Code der Handler bleibt gleich.
- evtl. gibt es noch Besonderheiten wie spezielle Memory-Sections,
RAM-Funktionen etc. Falls der Fall, nochmal konkret fragen.