Forum: Mikrocontroller und Digitale Elektronik FreeRtos für µVision4 und ulink2 auf MCB2300 mit LPC2378


von Thomas M. (Firma: keine) (tommy1169)


Lesenswert?

Hallo,
habe im Forum leider kein Topic gefunden welches mein Problem 
wiederspiegelt, daher hier meine Problemstellung:

Ich würde gern FreeRtos auf einem Keil MCB2300 Board mit dem LPC2378 zum 
Laufen bekommen.
Ich habe zum flashen den ULink2 und als IDE µVision4 evaluation.

Leider habe ich kein FreeRtos für diese Kombination gefunden.
Für Crossworks gibt es ja ein FreeRtos für den 2368 aber dort kann ich 
den ulink2 nicht als Target setzen. Leider verfüge ich nicht über den
CrossConnect Adapter sonst wäre das sicher unproblematischer.

Die Frage ist nun, gibt es eine Möglichkeit FreeRtos auf dem MCB2300 
Board über die angegebenen Tools zum Laufen zu bringen?

Wenn ja, wie ist die Vorgehensweise, da ich noch nicht sehr Firm mit 
dieser Art der Programierung bin...

thx im voraus

: Verschoben durch Moderator
von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Thomas Mönig schrieb:
>...
> Ich würde gern FreeRtos auf einem Keil MCB2300 Board mit dem LPC2378 zum
> Laufen bekommen.
> Ich habe zum flashen den ULink2 und als IDE µVision4 evaluation.
>
> Leider habe ich kein FreeRtos für diese Kombination gefunden.

Mglw. nicht alles ganz fertig als Beispiel vorhanden, aber im 
Realview-Packet sind alle benötigten Informationen.

> Für Crossworks gibt es ja ein FreeRtos für den 2368 aber dort kann ich
> den ulink2 nicht als Target setzen. Leider verfüge ich nicht über den
> CrossConnect Adapter sonst wäre das sicher unproblematischer.

Portierung hat erstmal nur wenig mit dem JTAG-Interface zu tun. Vielmehr 
ist ein Beispiel für Crossworks für die im Hintergrund verwendete 
GNU-Toolchain gemacht. Die Standart-Toolchain hinter uVision ist die von 
ARM (Realview oder wie auch immer die mglw. inzwischen heissen mag).

> Die Frage ist nun, gibt es eine Möglichkeit FreeRtos auf dem MCB2300
> Board über die angegebenen Tools zum Laufen zu bringen?

Sicher.

Dieses Beispiel hilft mglw. beim Einstieg:
http://www.freertos.org/index.html?http://interactive.freertos.org/entries/156159-lpc23xx-port-with-keil-rv-compiler

> Wenn ja, wie ist die Vorgehensweise, da ich noch nicht sehr Firm mit
> dieser Art der Programierung bin...

Man kann uVision auch so einstellen, dass es GNU-Tools aufruft, im 
Grunde also die gleiche Toolchain wie Crossworks. Es ist aber nicht mit 
dem Umschalten in "use Toolchain" alleine getan: stdio/"printf" bei CW 
etwas anders als z.B. bei Codesourcery G++ oder Yagarto, Linker-Skript 
liegt bei CW normalerweise nicht direkt vor sondern wird generiert, 
Einstellungen in Settings-Dialogen müssen aus den CW-Optionen nach 
uVision transferiert werden) ... ist also nicht so ganz gut als 
Starter-Projekt.

Das Beispiel aus dem o.g. Link  dürfte besser "vorgekaut" sein - habe es 
aber selbst nicht ausprobiert.

von Thomas Mönig (Gast)


Lesenswert?

So, vielen Dank erstmal für die schnelle Antwort.

Ich habe nun folgende Schritte abgearbeitet:

-Als Grundlage das FreeRtos ARM7_LPC2129_Keil_RVDS genommen.
-Dann die geänderten Portdateien eingefügt, die beschriebenen Änderungen 
in der LPC2300.s sind ja schon drin.
-Nach allen Änderungen bekomme ich beim Compilieren aber folgenden 
Fehler:
   RTOSDemo.axf: Error: L6406E: No space in execution regions with .ANY
   selector matching lpc2300.o(HEAP).
   RTOSDemo.axf: Error: L6407E: Sections of aggregate size 0xa000 bytes
   could not fit into .ANY selector(s).

Ist dieser Bekannt? Die Heapgrösse hatte ich auch schon vielfach 
geändert, ohne Auswirkung.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Vorab: ich nutze Realview-Compiler und -Linker nur ganz selten, daher 
nur Ansätze, oder neudeutsch FWIW.
RealView-Kenner düften eher im keil.com support-Forum zu finden sein.

Thomas Mönig schrieb:
> So, vielen Dank erstmal für die schnelle Antwort.
>
> Ich habe nun folgende Schritte abgearbeitet:
>
> -Als Grundlage das FreeRtos ARM7_LPC2129_Keil_RVDS genommen.
Kann dieses Beispiel ohne Änderungen problemlos compiliert und gelinkt 
werden?

> -Dann die geänderten Portdateien eingefügt, die beschriebenen Änderungen
> in der LPC2300.s sind ja schon drin.
Kann ich im Moment nicht nachvollziehen. Wurde die "Startup.s" des 
LPC2129 Beispiels angepasst oder einfach durch eine "LPC2300.s"-Datei 
ersetzt?

> -Nach allen Änderungen bekomme ich beim Compilieren aber folgenden
> Fehler:
>    RTOSDemo.axf: Error: L6406E: No space in execution regions with .ANY
>    selector matching lpc2300.o(HEAP).
>    RTOSDemo.axf: Error: L6407E: Sections of aggregate size 0xa000 bytes
>    could not fit into .ANY selector(s).
Das sind Fehler vom Linker, nicht vom Compiler. Sieht so aus, also wäre 
in lpc2300.s per SPACE eine Speicherbereich für den Heap (AREA HEAP) 
reserviert, der nicht in die vorhandene output-section ANY passt. ANY 
entspricht RAM-Speicherbereich (read-write und zero-init Daten). Kommt 
auch hin 0xa000 ist mehr als der verfügbare RAM-Speicher ("normaler", 
nicht Ethernet- und USB-RAM) im LPC2378. Im Zweifel die Fehlermeldungen 
nochmal in der Online-Hilfe von uVision suchen und/oder evtl. im Forum 
auf keil.com fragen.

Es gibt mehrere "memory-manager" in FreeRTOS, siehe FreeRTOS 
Dokumentation/"More Advanded"/Memory Managment. Falls FreeRTOS heap_1 
oder heap_2 genutzt wird, braucht man diesen HEAP-Speicher nur, wenn 
libc-Funktionen heap per malloc anfordern. Daher ist im LPC2129 
Heap_Size auch 0, weil heap_2 im Einsatz ist.

> Ist dieser Bekannt? Die Heapgrösse hatte ich auch schon vielfach
> geändert, ohne Auswirkung.
HEAP so wie er in Startup.s des 2129 Beispiels definiert ist nur fuer 
"heap_3.c" und Verwendung von malloc in der Anwendung relevant.

Testweise:

- falls mit heap_3.c gelinkt wird -> ersetzen durch heap_2.c

- falls Heap_Size equ ...., SPACE Heap_Size in in lpc2300.s -> Heap_Size 
equ 0

- FreeRTOS-interne Heap-Größe bei Bedarf in configTOTAL_HEAP_SIZE 
FreeRTOSConfig.h verringern (bestimmt im Grunde die Größe eines 
Byte-Arrays im RAM, das FreeRTOS/heap_1/2 selbst verwaltet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.