www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Programmieren mit/ohne vordefinierten Funktionen


Autor: Mischa Tschaev (misha_p)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Profis,

bin beim Einstieg in die µC-Welt und gehe gerade die Theorie und einige 
Toutorials der Praxis durch. Ich entwickele mit dem STM8S und einem 
Steckboard.

Als erstes habe ich gemerkt, dass der µC gleich viele vordefinierte 
Funktionen mit sich in der FWLib trägt. Diese Funktionen, wie z.B.

// Reset ("de-initialise") GPIO port D.
GPIO_DeInit(GPIOD);
// Initialise pin 0 of port D.
GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);

lassen sich einfach ansprechen... jetzt meine Fragen:

 1. Ist es üblich in der Industrie, dass µC solche Blöcke von Funktionen 
mit sich tragen ?
 2. Kann man auf die Stabilität und efizienz von diesen Fnkt. vertrauen 
(sind die Platzsparend genung)?
 3. Wie programmiert Ihr normaleweise - mit diesen mitgelieferten, 
vordefinierten Funkt. oder schreibt Ihr eigene?

Danke vielmals im Voraus

Grüsse - Mischa

Autor: Tobias Hagemeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mischa,

nein, das ist nicht üblich - und auch hier nicht der Fall. Wenn du einen 
C-Quelltext schreibst wird der ja auch erst in Assembler übersetzt und 
dann irgendwann als Maschinencode auf den µC geladen.
Was du hier benutzt (davon gehe ich einfach mal aus, ist üblicherweise 
so) sind Makros die in irgendeiner externen Datei definiert sind. Diese 
Makros werden üblicherweise groß geschrieben. Sie werden noch bevor der 
Quelltext überhaupt kompiliert wird vom Präprozessor durch andere 
Programmfragmente ersetzt - eben anhand der Definition der Makros in 
irgendeiner externen Datei, die du in deinen Quelltext über #include 
o.ä. einbinden musst.
Aus deinem Beispiel

GPIO_DeInit(GPIOD);

wird dann z.B.

GPIOD &= 0xFE;
GPIOD |= 0x10;

Es werden also einfache Ersetzungen vorgenommen, wobei du Parameter (in 
den Klammern angegeben) benutzen kannst. Das Makro könnte dann also 
irgendwo so definiert sein:

#define GPIO_DeInit(x) x &= 0xFE; x |= 0x10

Dabei wird dann jetzt einfach jedes Vorkommen von x durch GPIOD ersetzt.
Das ganze ist dann nicht mehr oder weniger performant als wenn du den 
gleichen Quelltext selber hin geschrieben hättest. Beides wird 
irgendwann in das gleiche Ergebnis übersetzt. Um das rauszufinden kannst 
du dir das Makro ansehen; das zu finden ist aber manchmal garnicht so 
einfach, da durch ein einziges #include auch mal gerne ein paar mehr 
Dateien eingebunden werden können (nämlich dann, wenn die eingebundene 
Datei selbst wieder Dateien mit #include nachlädt..).
Der µC kann typischerweise solch spezialisierte Befehle wie 
"initialisiere Port" oder so garnicht. Guck einfach mal ins Datenblatt 
;)


Gruß,
Tobi

Autor: Mischa Tschaev (misha_p)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank für die ausführliche Antwort - habe mittlerweile die vordef. 
Funktionen gefunden und verstanden - Danke nochmal

Grüsse - Mischa

Autor: Bernhard B. (schluchti)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem mit der mitgelieferten Library von STM ist meines Erachtens, 
dass man teilweise den Bezug zur Hardware verliert. Prinzipiell wäre das 
ja noch kein Problem, so lange die Bibliothek das tut was du willst. 
Wenn aber mal etwas nicht so funktioniert, wie gewünscht dann musst du 
sowieso auf Register Ebene runter. Ich für meinen Teil bin daher gerade 
dabei die Library von STM zu zerlegen und mir wichtige Hardware Module 
(SPI, PWM, Timer, RTC..) selbst auszuprogrammieren. Dauert zwar um 
einiges länger, aber man weiß dann wenigstens ungefähr mit welchen 
Registern man welche Einstellungen ändern kann.

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.