Ich benutze das Cortex M4 discovery Board mit einem STM32F407 und habe
darauf FreeRTOS laufen. Ich habe mir eine ARM Toolchain mit Hardware
floating point compiliert. Leider gibt es mit der FPU ein Problem, wo
ich nicht weiter komme.
Laut Manual sollte die FPU so aktiviert werden:
1 | SCB->CPACR |= ((3UL << 10 * 2) | (3UL << 11 * 2));
|
Das habe ich gemacht, aber wenn ich eine Berechnung mache und mir das
Ergebnis ausgeben lasse:
1 | snprintf(s, sizeof(s), "2*pi=%f#\n", f * 2);
|
Dann kommt ein komplett falsches Ergebnis raus:
1 | 2*pi=42769810903078258177028436187903032521109603624808797982656144311201298320619936835174
|
Wenn ich die gleiche Berechnung in einem Task von FreeRTOS mache, ist
alles ok! Aber nur in dem Task. Wenn ich kurz vorm Starten des
Schedulers, nachdem FreeRTOS nochmal die FPU aktiviert hat, die
Berechnung mache, kommt auch wieder das falsche Ergebnis raus. Wisst ihr
woran das liegt?
Ich hab mir jetzt so beholfen, das ich als erstes einen Init-Task
starte. Aber ich würde gern verstehen, wo das Problem ist.