Cortex M4 - Warum klappt das mit dem Systick nicht?

OP #2800518
Lesenswert?

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!
#2800569
Lesenswert?

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.
#2800622
Lesenswert?

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.
OP #2800638
Lesenswert?

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!!
#2800672
Lesenswert?

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)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren