www.mikrocontroller.net

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


Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ttl (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: A. K. (prx)
Datum:

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

Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.