Forum: Mikrocontroller und Digitale Elektronik STM32 - GPIO Funktionen und assert_param


von Ulf (Gast)


Lesenswert?

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.

von ttl (Gast)


Lesenswert?

schau doch einfach in den source code der lib

ausserdem rate ich dir besser mal die neue lib 3.x zu holen, die alte 
hat viele bugs

von Karl H. (kbuchegg)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

Die FWlib wird i.d.R. nicht inlined sondern separat übersetzt. Folglich 
sind das vollständige Funktionen mit allem drum und dran.

von Ulf (Gast)


Lesenswert?

Ok, die Optimierung auf "Level 03" brachte für die ersten beiden 
Varianten einen Zeitgewinn von ca. 30%. Schein mir immer noch recht 
langsam zu sein.

Bei Variante 3 erwartungsgemäß kein Veränderung.

Die Lib in Version 3 habe ich mir schon angesehen. Hat ja größere 
Änderungen von der Struktur her. Wollte aber mit der 
Standardinstallation von Keil erstmal etwas spielen.

Mir ist auch nicht ganz klar, wie ich die Version 3 sinnvoll einbinden 
soll.

von Karl H. (kbuchegg)


Lesenswert?

Ulf schrieb:
> Ok, die Optimierung auf "Level 03" brachte für die ersten beiden
> Varianten einen Zeitgewinn von ca. 30%. Schein mir immer noch recht
> langsam zu sein.

Der Rest wird Overhead durch den Funktionsaufruf sein.

Du hast ja hier den Fall, dass du schon fast mehr Verwaltung (für den 
Funktionsaufruf) als tatsächliche Arbeit hast.

Ich kenne die Lib nicht, aber wenn die Funktionen nicht geinlined werden 
können, würde ich mir zumindest eine Makroversion der Funktionen machen.

von Ulf (Gast)


Lesenswert?

>ausserdem rate ich dir besser mal die neue lib 3.x zu holen, die alte
>hat viele bugs

Habe jetzt die LIB Version 3.3.0 von STM ausprobiert. Funktioniert mit 
ähnlichen Zeiten, ehr noch etwas langsamer.

Assert_Param ist nicht das Problem. Die Funktion wird standardmäßig 
nicht verwendet.

Ist es günstiger, eine .LIB zu verwenden, oder jeweils die benötigten 
Module in das Projekt im Quellcode-Format einzubinden?

von Karl H. (kbuchegg)


Lesenswert?

Ulf schrieb:

> Ist es günstiger, eine .LIB zu verwenden, oder jeweils die benötigten
> Module in das Projekt im Quellcode-Format einzubinden?

Definiere 'günstig'

Was ist günstiger?
Mit dem LKW von Hamburg nach Berlin zu fahren oder mit einem Smart

Antwort: Kommt drauf an
Wenn ich einen Wochenendausflug mache, ist der Smart günstiger.
Wenn ich übersiedle, ist der LKW günstiger.

von Ulf (Gast)


Lesenswert?

> günstiger

Abwegung der Vor- und Nachteile

.LIB Vorteile
- Projekt übersichtlicher, nur die .h werden eingebunden
- Projekt-Erstellung geht schneller

Nachteile
- LIB so optimiert, wie bei der Erstellung
- Compilerabhängig
- nicht INLINE
- einzelne Module können nicht angepasst werden (sollte man auch nicht 
unbedingt tun, da STM dort pflegt), Problem sind ggf. nur die BUGs

sicher noch was vergessen.

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.