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
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
vielen Dank für die ausführliche Antwort - habe mittlerweile die vordef. Funktionen gefunden und verstanden - Danke nochmal Grüsse - Mischa
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.