Ulf schrieb:
> Erste Gehversuche auf STM32F und Olimex P103 Board. Grundsätzlich
> funktioniert es. (KEIL MDK EVA-Version). Benutze die STM LIB 2.0.1
> 8MHz Quarz extern, PLL auf 72MHz.
>
> Wie kommen die enormen Geschwindigkeitsunterschiede zu stande? Die
> Zeiten sind immer die zwischen PIN setzen und PIN rücksetzen, ohne
> irgendwelche anderen Anweisungen dazwischen:
>
> GPIO_WriteBit(GPIOC, GPIO_Pin_12, Bit_RESET); // 280ns
>
> mit
> GPIO_ResetBits(GPIOC,GPIO_Pin_12); // 250ns
>
> mit
> GPIOC->BSRR = GPIO_Pin_12; // 25ns
>
> Letzte Anweisung ist extrem schnell. Ich vermute, es hat was mit der
> ASSERT_PARM Funktion zu tun.
Vermute ich nicht.
Implementierungen der Funktionen oder Makros ansehen.
Wenn es sich dabei um echte Funktionen handelt: Ist der Optimizer
eingeschaltet und werden die Funktionen geinlined? Wenn nicht dann hast
du da höchst wahrscheinlich schon das Problem: Die Funktionen müssen
indirekt über die Adresse von GPIOC zugreifen.
Der Unterschied zwischen 1) und 2) ist auch leicht durch einen
zusätzlich notwendig if zur Unterscheidung der gewünschten
Funktionalität erklärbar.
Lediglich bei deiner Version 3) liegt schon alles so zurecht, dass der
COmpiler auch ohne Optimizer kurzen, schnellen Code erzeugen kann.
Also: Optimizer eingeschaltet?