Archiv für das Tag 'Port'

µC/OS-II Port für den Cortex-M3

4. September 2011

Wie ich in meinem letzten Artikel schon geschrieben habe möchte ich mit meinem SportTracker Projekt einige für mich neue Dinge ausprobieren. Unter anderem möchte ich auch mal ein wenig mit Echtzeitbetriebssystemen experimentieren. Das Betriebssystem meiner Wahl ist hierbei das uC/OS-II von Micrium. Jetzt höhre ich natürlich schon die ersten Stimmen: „Warum gerade das?“, „Wieso so ein kommerzieller Mist? FreeRTOS ist doch frei und kostenlos“, usw., usw.. Die Argumente sind wahrscheinlich auch zum großen Teil richtig, aber…

Ich habe mich für uC/OS-II entschieden, weil ich die Dokumentation des Betriebssystems und auch den Code des Systems sehr gut finde. D.h. ich habe mir schon vor einiger Zeit das Buch von Herrn Labrosse gekauft und ich finde, dass er die Grundfunktionen von Embedded Betriebssystemen wirklich gut erklärt. Ähnliches gilt natürlich auch für FreeRTOS, aber aus meiner Sicht ist uC/OS-II verständlicher und übersichtlicher geschrieben.

Nachdem ich mich also für uC/OS-II entschieden hatte war es nun in einem nächsten Schritt natürlich wichtig, dass es auch eine Portierung für den von mir geplanten Controller, den STM32, sowie meine Entwicklungsumgebung, Crossworks for ARM, gibt. Und da waren sie auch schon wieder, meine Probleme. Auf der Micrium Seite gab es natürlich nur Ports für die kommerziellen Toolchains von Keil und IAR und nicht für den GCC. Es blieb mir also nichts anderes übrig, als eine Anpassung für den GCC zu schreiben. Diese Anpassung gibts jetzt hier zum herunterladen. Basis meines Ports für den GCC Compiler war ein Port für die Toolchain von Keil. Im Prinzip habe ich auch nur die Asssembler Datei „os_cpu_a.asm“ entsprechend anpassen müssen. Wobei sich die Anpassungen nicht auf den Code an sich bezogen, sondern vielmehr auf die Anpassung der generellen Struktur der Datei. D.h. die Schlüsselwörter zur Definition von Sections, externen Variablen und Funktionen unterscheiden sich z.B. geringfügig zwischen den beiden Toolchains. Ein wichtiger Punkt bei der Portierung war dann noch, dass der GCC zu Beginn einige ASM-Befehle des Ports nicht kannte obwohl diese eindeutig im STM32 Programming Manual definiert waren. Dieses Problem konnte ich dann aber nach ein wenig googlen lösen. Beim GCC ist es nämlich erforderlich die Schlüsselworte „.syntax unified“ voranzustellen damit der Assembler sich nicht verrennt. Ein Glück das die meisten Probleme schonmal ein anderer hatte :-).

Also dann, zu guter letzt fehlt nur noch mein Port für den GCC:

uCOS_Port_GCC_STM32

Viel Spass damit…

PS: Bevor ich’s noch vergesse. Der GCC ist auch für mich noch eine neue Toolchain. Es ist also möglich, dass noch Fehler im Code enthalten sind. Die Grundfunktionen habe ich zwar getestet aber die Probleme stecke ja bekanntlich im Detail. Wer also einen Fehler findet, kann ihn mir gerne melden :-). Einen Finderlohn kann ich leider nicht zahlen ….