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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.