Forum: Mikrocontroller und Digitale Elektronik STM32f429NIH6U FPU deaktivieren


von Nils H. (nilsho)


Lesenswert?

Hallo,

ich arbeite zurzeit mit einem STM32f429NIH6U, also einem Cortex M4 mit 
FPU. Allerdings möchte ich die FPU gerne deaktivieren.

Ich arbeite mit der STM32Cube IDE und habe in den Project Propertiers 
auch die Möglichkeit gefunden um die FPU auf "None" zu stellen. 
Betrachte ich allerdings den generierten Assembler Code beim rechnen mit 
floats, so werden weiterhin die vmul Befehle, zum Arbeiten mit der FPU 
verwendet.

Leider habe ich es nicht geschafft mit C-Code oder inline Assembler die 
Coprozessoren der FPU zu deaktivieren.

Hat vielleicht jemand eine Idee, wie man die FPU deaktivieren kann? Egal 
ob über Code oder die IDE.

Das ist mein aktueller Code zum Testen:
1
#include <stdio.h>
2
#include <stdlib.h>
3
#include "stm32f4xx.h"
4
5
int main(void){
6
  //Deaktivieren der Coprozessoren in C
7
  //FPU_CPACR->CPACR &= ~(1 << 22);
8
  //FPU_CPACR->CPACR &= ~(1 << 23);
9
10
  //Deaktivieren der Coprozessoren in Assembler
11
  /*__asm__("LDR R0, 0xE000ED88;"
12
      "LDR R1, [R0];"
13
      "AND R1, R1, #0x0 << 20;"
14
      "STR R1, [R0];");*/
15
16
17
  float pi = -3.141759487516545612;
18
  int b = 4;
19
  int ergebnis;
20
21
  ergebnis = pi + b;
22
23
  __asm__("nop;");
24
}

Ich würde mich sehr über Vorschläge freuen
Viele Grüße
Nils

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Dass haengt mit Deinen Kompilieroptionen zusammen. Du brauchste 
-mfloat-abi=soft

von Nils H. (nilsho)


Lesenswert?

Perfekt! Das hat mein Problem gelöst, vielen Dank.  :)

von Kevin M. (arduinolover)


Lesenswert?

Viel wichtigere ist doch die Frage warum sollte man das wollen?

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Kuerzere Taskwechselzeiten und IRQ Reaktion?

von Kevin M. (arduinolover)


Lesenswert?

Naja Float in Software dauert je nach Operation auf dem STM gut 12 bis 
15 mal so lang wie mit der FPU wenn ich mich noch recht an den AppNote 
erinnere. Ob da wirklich eine Zeitersparnis raus kommt ich weiß ja 
nicht.

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.