Ich versuche, ein RTOS auf meinem STM32F407VGT6-Board auszuführen. Ich habe die Demo CORTEX_M4F_STM32F407ZG-SK von der freeRTOS-Website heruntergeladen und den Code mit IAR IDE geflasht, aber die LEDs blinken nicht wie erwartet. Beim Debuggen des Programms habe ich festgestellt, dass das Programm hier abstürzt:
vPortStartFirstTask
ldr r0, =0xE000ED08
ldr r0, [r0]
ldr r0, [r0]
msr msp, r0
cpsie i
cpsie f
dsb
isb
svc 0 // The program crashes here!!!!
Ich habe einige Nachforschungen in den freeRTOS-FAQ angestellt , der Abschnitt „Die von mir erstellte Anwendung wird kompiliert, läuft aber nicht“ scheint das gleiche Problem zu behandeln, aber
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define xPortSysTickHandler SysTick_Handler
ist in der Datei FreeRTOSConfig.h vorhanden. Hatte jemand das gleiche Problem? oder das von mir verwendete RTOS ist nicht das richtige?
Wenn Ihr Code in dieser Zeile „abstürzt“, haben Sie höchstwahrscheinlich den FreeRTOS SVC-Handler nicht installiert. Ich stelle fest, dass Sie die Zeile eingefügt haben:
#define xPortPendSVHandler PendSV_Handler
Dadurch wird ein CMSIS-Standardname (PendSV_Handler) durch den FreeRTOS-Namen ersetzt, aber das setzt voraus, dass Ihre Vektortabelle den CMSIS-Standardnamen verwendet - überprüfen Sie, ob dies der Fall ist und dass nichts anderes in Ihrer Anwendung die Vektortabelle durch einen anderen ersetzt eine durch Neuschreiben des Vektor-Basisadressregisters. Übrigens – FreeRTOS hat ein sehr aktives Support-Forum – es ist mir immer ein Rätsel, warum Leute FreeRTOS-Fragen an einem anderen Ort stellen als an dem Ort, an dem FreeRTOS-Experten zuschauen und bereit sind, Fragen zu beantworten.
ARM-Cortex-M4-Produkte basieren auf der ARM7-Core-Architektur
Tatsächlich ist dies nicht der Fall. So verwirrend es auch erscheinen mag, ARM7-Mikrocontroller verwenden einen ARMv4-Kern, während Cortex-M4-Mikrocontroller einen ARMv7-Kern verwenden :o) Diese spezielle FAQ trifft in diesem Fall also nicht zu.
In der FreeRTOS-FAQ, die Sie verwenden, haben Sie nach Punkt 5 gesucht
ARM-Cortex-M4-Produkte basieren auf der ARM7-Kernarchitektur, siehe diese Wikipedia-Referenz , und da Ihr Snippet deutlich „vPortStartFirstTask“ zeigt, scheint dies vollständig zu beschreiben, was mit Ihrem System vor sich geht.
Sie müssen den SVC_Handler
und PendSV_Handler
ISR-Handler in stm32f4xx_it.c
der Datei entfernen.
Die FreeRTOS-Dateien müssen im C-Compiler-Modus und nicht in C++ kompiliert werden. Das bedeutet, dass C-Dateien als C-Quellcode und C++-Dateien als C++-Quellcode kompiliert werden müssen. Sie können „Auto (erweiterungsbasiert)“ im Abschnitt „Sprache“ auswählen.
Sie müssen den Stamm der FreeRTOSConfig.h
Datei wie folgt zur Präprozessor-Registerkarte des Assembler-Abschnitts des Projektoptionsfensters hinzufügen:
Eugen Sch.
Fed
Eugen Sch.