Forum: Mikrocontroller und Digitale Elektronik FreeRTOS Demo SAM7 hängt im IRQ (Eclipse Yagarto)


von Klaus K. (klkl)


Angehängte Dateien:

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

von (prx) A. K. (prx)


Lesenswert?

Interrupt verwenden ohne einen Handler zu definieren funktioniert nicht. 
Dieser Default-IRQHandler mit Totschleife ist genau für einen Zweck 
drin: dir zu zeigen, dass du was vergessen hast.

Vektorisierte Interrupts auf ARM7 sind ein etwas komplexes Thema.

von Klaus K. (klkl)


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

von (prx) A. K. (prx)


Lesenswert?

Fang mal für den Anfang mal ohne Thumb-Modus und folglich ohne 
Interworking an, also im ARM-Modus.

von Klaus K. (klkl)


Lesenswert?

OK, ich habe im makefile die -mthumb -mthumb_interwork und 
THUMB_INTERWORK rausgeworfen.
Keine Änderung. Das Define verwendet jetzt den richtigen Code, trotzdem 
haengt es im IRQ.

Noch eine Idee?

Gruß Klaus

von (prx) A. K. (prx)


Lesenswert?

Könnte mit dem Startup-Code zusammenhängen. Liefert FreeRTOS nichts 
dergleichen mit, das mit IRQs klar kommt? Da ich aber weder SAM7 noch 
FreeRTOS verwende...

von Klaus K. (klkl)


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

von Sven Wagner (Gast)


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

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.