Hallo an zusammen,
ich habe hier ein Board mit einem STM32F217. GPIOs,
Serielle-Schnittstelle habe ich als erstes in Betrieb genommen und das
funktioniert soweit. Als nächstes wollte ich freeRTOS zum laufen
bringen.
Version: FreeRTOS.org V6.0.1
+ STM32F2xx standard peripherals library 1.0.0
Mein Problem ist, dass mein Scheduler beim Starten des ersten Threads in
den HardFault_Handler läuft. Im Debugger konnte ich bis zum SVC_Handler
folgen. Hat jemand eine Idee und kann mir einen Tipp geben?
Gruß,
Christian
main.c:
1
2
SystemInit();
3
4
/* Set the Vector Table base address at 0x08000000 */
5
NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0);
6
7
/* Configure HCLK clock as SysTick clock source. */
Hallo,
ich weiß nicht, ob freeRTOS das nicht sowieso macht, aber bei meinem
Scheduler hatte ich den Hardfault immer dann, wenn ich mit
EXC_RETURN=0xFFFFFFFD zurückspringen wollte, der Rücksprung aber wieder
in einen IRQ-Handler gehen sollte. Daher muss der PendSV die geringste
Priorität haben und immer in den Threadmode springen wollen.
Das bedeutet insbesondere auch, dass der SVC höher priorisiert sein
muss.
Gruß
Lasse
PS: Ansonsten mal wirklich single steppen und vor branches die
Sprungadressen checken, ob der Stack da passt.
>/* Configure HCLK clock as SysTick clock source. */>SysTick_CLKSourceConfig( SysTick_CLKSource_HCLK );>NVIC_SetPriority( SysTick_IRQn, 15 );
Als erstes lässt du mal die Finger vom Systick.
Der wird vom FreeRTOS belegt. Und HardFault
bedeutet dein Controller springt in den Wald.
Das liegt irgendwo in den Tiefen deines unbekannten
Programmes verborgen. Kann man also nix zu sagen.
Danke für die beiden Antworten. Das OS stürtzt inzwischen nicht mehr ab.
Ich habe das OS jetzt als erstes in main intialisiert, noch vor der
seriellen Schnittstelle und anderen Devices. Die anderen Sachen habe ich
dann in die mainTask verschoben und hatte von nun an keine Probleme
mehr.
main.c