Guten Abend! Ich will gerade die Floating Point Unit meines STM32F4 ausprobieren und schauen wie viel sie bringt etc. Daher habe ich den Testcode geschrieben: float fy,fz,fx,fa,fb,fc; fy = 9.99f; fa = 1456.78f; fb = 23.7894f; fc = 12378.975f; fz = 8.88f; SysTick->LOAD = 0x802C80; SysTick->VAL = SysTick->LOAD; SysTick->CTRL = 0b00000000000000000000000000000101; fx = (float)(fy*fa+fb*fc+fz)*2.45; if (fx>757173) GPIO_SetBits(GPIOA,GPIO_Pin_15); Die if Zeile ist eigentlich nur dazu da einen Haltepunkt setzen zu können. Wenn ich nun im Debugger schaue ist dort SysTick_VAL 0x00802c7f. Das kann ja nicht sein dass der nur einen Prozessortakt dafür benötigt. Was ist da falsch? Danke euch für Antworten!
Hallo, hast du die FPU auf "Hard" oder "Soft" gesetzt? schau mal diese Seite an: Beitrag "Floating Pointing Unit STM32F4" Gruß G.G.
Die Einstellung ARM FP ABI Type: None/Soft/Hard ändert leider garnichts an dem ganzen :( Habe Alle 3 Probiert! Sonst ist eingestellt: -Arm Architecture: v7EM -Arm Core Type: Cortex-M4 -Arm FPU Type: FPv4-SP-D16 -GCC Target: arm-unknown-eabi Viele Grüße!!
Ich benutze die Crossworks IDE. Habe den Simulator noch nie benutzt, aber habe es eben probiert: Hier steht statt der 7F am ende gleich 80 drin, also so als würde er gar keine Zeit dafür brauchen!
Hallo, system_stm32f4xx.c void SystemInit(void) { /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */ #endif wenn dein Simulator/Debugger das Ziel erreicht und folgendes einschaltet: SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and .. ist alles ok!! Gruß G.G.
Florian A. schrieb: > Die if Zeile ist eigentlich nur dazu da einen Haltepunkt setzen zu > können. Wenn ich nun im Debugger schaue ist dort SysTick_VAL 0x00802c7f. > Das kann ja nicht sein dass der nur einen Prozessortakt dafür benötigt. Wenn sich fy, fz, fa, fb, fc nicht ändern können, kann der Compiler die überflüssige Berechnung wegoptimieren d.h. er macht an der Stelle nur noch die Zuweisung fx = 757173.irgendwas; > Was ist da falsch? Nichts.
Okay, das war der springende Punkt: Optimization Level 1 :( Habe nun auf Null geschaltet und siehe da, die Berechnung braucht mit Einstellung Soft 494 Zyklen und mit Hard 287 Zyklen. Ist das realistisch oder läuft die FPU wohl eher noch nicht richtig? Schönen Abend und danke für alle Antworten!!
Hurra :) :) in CP10 steht 0b11 und in CP11 auch 0b11! Danke euch Allen
Florian A. schrieb: > Okay, das war der springende Punkt: Optimization Level 1 :( > Habe nun auf Null geschaltet und siehe da, die Berechnung braucht mit > Einstellung Soft 494 Zyklen und mit Hard 287 Zyklen. Ist das realistisch > oder läuft die FPU wohl eher noch nicht richtig? http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0439b/BEHJADED.html (für die Berechnung wären das zu viele)
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.