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
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.
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
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
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...
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.