FreeRTOS Demo SAM7 hängt im IRQ (Eclipse Yagarto)

OP #2334490
Lesenswert?

Hallo zusammen

Meine RTOS-Versuche mit dem SAM7 führen langsam zu den ersten 
Ergebnissen.
Kompilieren, linken und debuggen im Quelltext funktioniert.

Jetzt hängt die FreeRTOS-Demo kurz nach den Start in der Datei startup.s 
an der Stelle
--
IRQHandler:
    b IRQHandler
---
Mit meinem begrenzten ARM Wissen tippe Ich auf ein ARM/Thumb Problem 
oder Unwissenheit beim Linken....

Wo und wie kann Ich weiter suchen? Mein Makefile schicke ich mal mit....
Vielen Dank schon mal.

Gruß Klaus
Angehängte Dateien:
OP #2334807
Lesenswert?

Hallo

Das hilft mir schon mal weiter.
b ist ein branch und die .s Dateien sind Assembler....
Hätte ich auch drauf kommen können.... danke

Die FreeRTOS-Demo sollte eigentlich alles enthalten. Wahrscheinlich habe 
Ich beim zusammenmixen der makefiles den richtigen irg-Handler 
rausgeworfen... ?

Jetzt habe Ich schon mal eine Richtung zum Suchen.
Die Vektoren werden in AIC_SVR gespeichert.
Was ich erkennen kann:
in low_level_init wird der irq-Handler wohl auf diese Default-Routine 
gesetzt.
'perform memory controler remapping' wird aufgerufen (?wofür auch immer)

dann wird weiter oben portDISABLE_INTERRUPTS() aufgerufen, das wohl nur 
im Thumb-Modus funktioniert (?)
mit dem folgenden xPortStartScheduler() wird dann der IRQ ausgeloest und 
mein Board haengt. Das disable scheint also nicht zu funktionieren.

Es scheint am Makro THUMB_INTERWORK zu haengen, das in meinem makefile 
gesetzt wird....

Ich werde nochmal die makefiles vergleichen und experimentieren...

Gruß Klaus
OP #2335782
Lesenswert?

Danke, das du trotzdem weiterhilfst....
Die FreeRTOS-Demo ist für WinARM gedacht. Dort wird arm-elf-gcc 
verwendet. Yagarto verwendet arm-none-eabi-gcc. Deshalb passt das wohl 
alles nicht zusammen.

Der Startup-code ist unverändert der aus der FreeRTOSDemo (die ich schon 
mal auf meiner HW laufen gesehen habe...) Das sollte es nicht sein.

Die *.ld (Linker description files?) sind reichlich unterschiedlich. 
Dort gibt es auch eine Stelle (in der funktionierenden minimal-Demo)
---
/* The sizes of the stacks used by the application. NOTE: you need to 
adjust */
C_STACK_SIZE   = 512;
IRQ_STACK_SIZE = 0;
FIQ_STACK_SIZE = 0;
SVC_STACK_SIZE = 0;
ABT_STACK_SIZE = 0;
UND_STACK_SIZE = 0;
---

ohne Stack wird mein IRQ(wenn ich Ihn denn mal am laufen habe) 
wahrscheinlich nicht funktionieren. Was sind da sinnvolle Werte?
Das kann aber (eigentlich) nicht der Grund sein warum mein Projekt in 
die Endlosschleife springt.
Es wird der default IRQHandler eingetragen, (soweit ich das beim 
debuggen sehen kann) nicht mehr verändert und dann auch fälschlich 
angesprungen.
portDISABLE_INTERRUPTS tut nicht das was der Name verspricht.

Brauche Ich auf dem ARM irgendwann (z.B. bei der Initialisierung) 
THUMB-Code oder komme Ich nur mit ARM-Code aus?

Gruß Klaus
Gast #2337025
Lesenswert?

Klaus Kloos schrieb:
> Brauche Ich auf dem ARM irgendwann (z.B. bei der Initialisierung)
> THUMB-Code oder komme Ich nur mit ARM-Code aus?
Wenn ich das richtig verstanden habe, ist der Thumb-Instruction-Set ein 
Subset des eigentlichen Befehlssatzes. Er ist kleiner, kann weniger und 
ist daher etwas langsamer (für werden Caches effektiver).

Ich denke im Normalfall kommt man ohne Thumb aus. Erst wenn der Flash 
knapp wird, oder die Applikation auch "low performance" verträgt, sollte 
man über Thumb nachdenken. Es macht sich halt im Marketing gut ;-)

Grüße
Sven

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren