Hallo Zusammen,
ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429
zulegen. Dazu habe ich ein paar Verständnisfragen.
1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das
Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene
darüber?
2. Die Webseite
http://mikrocontroller.bplaced.net/wordpress/?page_id=2736 bietet
bereits tolle Libs. Das Nutzen dieser Libs ist jedoch reine
Programmierarbeit bzw. Zugreifen auf fertige Funktionen. Aber wie geht
man die Aufgabe an, wenn man ein solches Board kauft und solche Libs
nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?
3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem
Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne
Betriebssystem aus, weil über die Libs lediglich die Register
angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze
Softwarepakete entwickelt werden?
Dennis schrieb:> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene> darüber?
Das wird verscheiden gesehen. Manche bauen sich eine Lib für Ihre
Bedürfnisse, andere verwenden möglichst nur bereits vorgefertigte.
Dennis schrieb:> Aber wie geht> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?
Dann beginnst Du bei Adam und Eva. Oder beim Autobau beginnst Du,
erstmal Formen für Blechteile zu entwickeln.
Dennis schrieb:> Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne> Betriebssystem aus, weil ...
Betriebssystem kostet üblicherweise Speicherplatz und Geschwindigkeit.
Wenn man davon ausreichend hat für die geplante Anwendung und die
Anwendung Dinge wie Multithreading oder File-IO benötigt dann ist ein OS
schon schick und Du musst das Rad nicht neu erfinden.
rgds
Dennis schrieb:> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene> darüber?
Eine Library ist erst mal nicht mehr als eine Zusammenfassung von Code,
in der Regel mit dem Ziel den Code in verschiedenen Projekten wieder zu
verwenden. Damit ist nicht weiter spezifiziert, auf welcher Schicht
diese Bibliothek arbeitet. Bibliotheken z.B. zum Konvertieren von Zahlen
<-> Zeichenketten, wird man kaum selbst neu erfinden wollen. Hat man
aber z.B. ein bestimmtes Display, das speziell angesteuert werden muss,
dann ist es durchaus gang und gäbe sich dafür eine Bilbiothek zu
schreiben.
Bei Entwicklung von Firmware im Bereich von Embedded Systems von etwas
zu sprechen was "eine ebene über der Firmware" liegt, macht wenig Sinn.
Alles was auf einem µC ausgeführt wird, ist schließlich Teil der
Firmware. Die Ebene darüber passiert dann eher außerhalb des Geräts,
z.B. IoT, etc.
> Aber wie geht> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?
Hier ist die Frage: Was für Libs meinst Du?
Geht es darum neue externe Sensorik anzubinden, dann beginnt man z.B.
mit dem Studium des Datenblatts des Sensors. Geht es um ein bestimmtes
Regelungsverfahren - dann eben damit sich mit diesem Regelungsverfahren
auszeinander zu setzen. Oder allgemeiner mit der Frage: Was soll meine
Lib denn machen?
> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne> Betriebssystem aus, weil über die Libs lediglich die Register> angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze> Softwarepakete entwickelt werden?
Ein OS ist meist erst dann richtig sinnvoll, wenn mehrere Programme sich
um Ressourcen kloppen. Das muss dann verwaltet werden - angefangen bei
Speicher, Rechenzeit, bis hin zum Zugriff auf Peripherie. Auf einem µC
läuft aber i.d.R. ein einziges Programm für eine einzige ganz spezielle
Aufgabe. Da ist es meist einfacher und effizienter den Zugriff
verschiedener Unterprogrammteile auf diese Ressourcen manuell zu
koordinieren, als das mit einem Betriebssystem zu bewältigen. Auch der
Speicherbedarf ist bei einem Großteil der Aufgaben für µCs fix und
braucht nicht zur Laufzeit verwaltet zu werden. Da gibt es für ein OS
nichts zu tun.
Dennis schrieb:> ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429> zulegen. Dazu habe ich ein paar Verständnisfragen.
Deine Fragen lassen vermuten, daß Du noch nie etwas mit
Miktoprozessoren/-controllern zu tun hattest. Sofern kein direkter Zwang
zu diesem µC besteht oder keine besonders hohe Prozessorleistung
gefordert wird, fange eine Nummer kleiner an; meinetwegen mit AVR oder
einem Arduino.
Software für 'embedded' Systeme schreibt man nicht durch Zusammenklicken
fertiger Lösungen für irgendwelche Probleme.
Dennis schrieb:> 1. Was bedeutet allegemein die Entwicklung von Firmware?
Es bedeutet, ein Binärfile zu erzeugen, welches man in einen permanenten
Speicher überträgt. Dadrin ist das komplette Programm nebst den Daten,
die zur Erstellungszeit mitgegeben wurden.
> Schließt es das Programmiern von Libs mit ein?
Kann, muß aber nicht. Sinnvolle Libs sind recht generisch gehalten,
damit man sie auf möglichst vielen Plattformen wiederverwenden kann. Das
bedeutet oftmals einen gewissen Overhead. Je nachdem, wieviel Overhead
und wieviel Entwicklungszeit dafür gespart wird, kann sich das bei der
angepeilten Stückzahl lohnen oder auch nicht.
Spätestens, wenn man mit USB, IP-Stacks usw. arbeitet, wird man das
nicht mehr alles selber programmieren wollen.
> Oder liegt die Firmware eine Ebene darüber?
Nein, die Firmware enthält alles.
> Aber wie geht> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?
Man liest sich das Datenblatt des Controllers durch und beginnt seine
Software entlang des Ausführungsablaufs zu schreiben. Das Erste, was ein
STM32 nach dem Start tut, ist, daß er sich den Stackpointer greift, der
am Anfang des ROM liegt, und dann springt er in den Resetvektor.
Also reserviert man sich statisch ausreichend RAM in einem Array und
legt dessen Adresse an den ROM-Start. Die Adresse der Resetfunktion
folgt danach. Danach weitere Funktionsadressen, das ist die
Interrupttabelle, die man mittels des Linkers an die richtige Adresse
legt.
In der Resetfunktion initialisiert man den Controller, also Taktfrequenz
einstellen, Speicher nullen, vorinitialisierte Variablen aus dem ROM ins
RAM kopieren und sowas. Wenn man das alles gemacht hat, springt man in
seine main-Funktion.
Von dort aus ruft man dann weitere Funktionen auf, mit denen man Sachen
wie z.B. IO konfiguriert (nach Datenblatt), und dann hat man die übliche
Endlosschleife, in der das eigentliche Programm dann läuft.
> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem> Mikrocontroller ohne OS?
Ein OS bedeutet Overhead und zusätzliche Komplexität, die zu Fehlern
führen kann. Gemäß "keep it simple and stupid" vermeidet man das
solange, wie es nicht notwendig ist.
Ab einer gewissen Komplexität der Anwendung selber, besonders mit
nebenläufigen Tasks, wird die manuelle Verwaltung aber wiederum so
fehleranfällig, daß ein reifgetestetes OS die bessere Wahl ist.
> Kommt ein Mikrocontroller wie der STM32 ohne> Betriebssystem aus, weil über die Libs lediglich die Register> angesteuert werden
Man kann auch auf einem STM32 mit OS arbeiten. Das wird meistens
allerdings nicht sowas wie Linux sein, sondern die üblichen kleinen
Echtzeit-Betriebssysteme.
Obwohl µC-Linux auf STM32 durchaus läuft, aber dazu muß man dann auch
noch eine externe SD-Karte oder sowas haben sowie externes RAM, in das
man das Linux lädt, und das bedeutet zusätzliche Bausteine bei mieser
Performance.
Beste Dank für die die zahlreichen Antworten. C/C++ kann ich
Programmieren, nur habe ich mich bisher nie im Detail mit
Treiberentwicklung oder ähnliches befasst. Denn STM32 finde ich deshalb
spannend, da dieser sehr viel für sein Geld bietet. Ich könnte
beispielsweise Werte eines ADCs über die I2C Schnittstelle auslesen und
über das Display ausgeben, was ich mit einem Arduino zwar auch könnte,
aber da sind die meisten Libs bereits verfügbar. Beim STM32 würde ich
gerne versuchen, die Libs mithilfe des Handbuchs zu schreiben, einfach
um Erfahrung zu sammeln. Meine Frage zum Thema Firmware war allgemein
darauf bezogen, da unter dem Begriff verschiedene Techniken zu verstehen
sind. Aber im Prinzip spielt sich die Entwicklung von Libs auf der
gleichen Ebene ab, wenn ich das richtig verstanden habe. Was ich
persönlich viel Schwieriger finde, ist das Entwicklern von Treibern
unter Linux auf Kernelebene ...
Nop schrieb:> Es bedeutet, ein Binärfile zu erzeugen, welches man in einen permanenten> Speicher überträgt. Dadrin ist das komplette Programm nebst den Daten,> die zur Erstellungszeit mitgegeben wurden.
Vielen Dank für deine ausführliche Antwort. Verfügt der STM32 im
Auslieferungszustand über eine Firmware? Bibliotheke sind nicht
vorhanden, daher gehe ich davon aus.
Dennis schrieb:> Verfügt der STM32 im Auslieferungszustand über eine Firmware?
Jein. Es ist üblicherweise ein Bootloader drauf, der von der zu
erstellenden Anwendung auch normalerweise nicht überschrieben wird.
Im Speicherbereich der Anwendung selber ist "ab Werk" nichts drauf, aber
alle mir bekannten Evalboards haben dann noch eine Demo-Software
eingespielt. Typischerweise blinkt die mit LEDs und so, damit man sieht,
daß das Board prinzipiell lauffähig ist.
Diese Demo-Anwendung wird man dann mit der eigenen Anwendung
überschreiben.
Und ja, STM32 zu Fuß zu programmieren ist um Dimensionen einfacher als
Linuxkernel-Entwicklung.
Dennis schrieb:> Verfügt der STM32 im> Auslieferungszustand über eine Firmware?
Nein. Welche Aufgabe sollte die Firmware denn auch übernehmen? Die
Firmware schreibst Du selbst, ggfs unter Zuhilfenahme fremder Libs. Auch
wenn ein OS zum Einsatz kommen würde, wäre das Bestandteil der Firmware,
die Du ins Flash übertragen müsstest.
Also ist eine Firmware im Prinzip die Kombination aus Libs, die eben
entsprechende Adressen, etc. enthalten, und Funktionen, die entsprechend
ausgeführt werden ...
Autor: m.n. (Gast)
>Deine Fragen lassen vermuten, daß Du noch nie etwas mit>Miktoprozessoren/-controllern zu tun hattest. Sofern kein direkter Zwang>zu diesem µC besteht oder keine besonders hohe Prozessorleistung>gefordert wird, fange eine Nummer kleiner an; meinetwegen mit AVR oder>einem Arduino.
Hmmm, lass mal sehen ...
... sieht gut aus ;-)
Ja. Eigentlich ist auch der bereits erwähnte Bootloader Teil der
Firmware. Dass man den beim Einspielen einer neuen Firmware ins Flash
stehen lässt, ist da eigentlich ein Sonderfall. Abgesehen davon ist es
eher wie eine komplette "Neuinstallation" von allem.
Proddl schrieb:> Dass man den beim Einspielen einer neuen Firmware ins Flash> stehen lässt, ist da eigentlich ein Sonderfall.
Kenne ich als Normalfall, damit man auf jeden Fall noch eine Möglichkeit
das Gerät noch updaten kann. Nicht immer ist JTAG überhaupt bestückt,
vor allem nicht bei Seriengeräten. Da wird die Software normalerweise
per RS232 und den Bootloader eingespielt, so kenne ich das.
Zumal der Bootloader ja auch nicht in dem Speicherbereich sitzt, wo die
Applikation hinkommt, und der Bootloader wird auch nur ausgeführt, wenn
zwei IO-Pins entsprechend von außen gesetzt werden.
Nop schrieb:> Proddl schrieb:>> Dass man den beim Einspielen einer neuen Firmware ins Flash>> stehen lässt, ist da eigentlich ein Sonderfall.>> Kenne ich als Normalfall, damit man auf jeden Fall noch eine Möglichkeit> das Gerät noch updaten kann.
Japp, da habe ich schlecht formuliert. Natürlich lässt man einen
Bootloader unangetastet da, wo er ist. Und genau das ist was einen
Bootloader zu einem Sonderfall in der Firmware macht. Es ist aber im
Allgemeinen nicht so wie bei einem PC, dass man OS und Libs irgendwo ein
einziges mal installiert und anschließend nur noch sein Programm dazu
spielt. Der Normalfall ist dass man ein Firmwareimage erstellt, das
alles (außer dem Bootloader) enthält und das dann ins Flash lädt.
Dennis schrieb:> Hallo Zusammen,> ich würde mir gerne als Einstieg in Embedded Systems einen STM32F429> zulegen. Dazu habe ich ein paar Verständnisfragen.>> 1. Was bedeutet allegemein die Entwicklung von Firmware? Schließt es das> Programmiern von Libs mit ein? Oder liegt die Firmware eine Ebene> darüber?>> 2. Die Webseite> http://mikrocontroller.bplaced.net/wordpress/?page_id=2736 bietet> bereits tolle Libs. Das Nutzen dieser Libs ist jedoch reine> Programmierarbeit bzw. Zugreifen auf fertige Funktionen. Aber wie geht> man die Aufgabe an, wenn man ein solches Board kauft und solche Libs> nicht verfügbar wären? Man schreibt diese selber, aber wo beginnt man?>> 3. Was ist der unterschied zwischen einem Mikrocomputer mit OS und einem> Mikrocontroller ohne OS? Kommt ein Mikrocontroller wie der STM32 ohne> Betriebssystem aus, weil über die Libs lediglich die Register> angesteuert werden und auf einem Mikrocomputer mit OS oft auch ganze> Softwarepakete entwickelt werden?
Achtung Eigenwerbung:
https://www.amazon.de/Embedded-Controller-Grundlagen-industrielle-Anwendungen/dp/3658148497
Ich denke, dass Du dort eine Menge deiner Fragen beantwortet bekommst.
Es gibt selbstverständlich auch Andere Bücher zu dem Thema.
Dennis schrieb
>Ich könnte>beispielsweise Werte eines ADCs über die I2C Schnittstelle auslesen und>über das Display ausgeben, was ich mit einem Arduino zwar auch könnte,>aber da sind die meisten Libs bereits verfügbar. Beim STM32 würde ich>gerne versuchen, die Libs mithilfe des Handbuchs zu schreiben
Im Moment ist die Entwicklung des Arduino-Framworks für die STM32
Prozessoren voll im Gange.
Experten, die sich gut mit der STM32-Treiberentwicklung auskennen, sind
dort willkommen.
Da gibt es schon noch einige offene Baustellen und wer gerne zu etwas
beitragen will, was dann sehr viele Leute verwenden werden, ist dort gut
aufgehoben.
>Was ist der unterschied zwischen einem Mikrocomputer mit OS>und einem Mikrocontroller ohne OS?
man lässt das OS(RTOS) für den uC ungenutzt, das man umsonst dazu
bekommt
>Verfügt der STM32 im Auslieferungszustand über eine Firmware?
ein Bootloader ist drin, mehr nicht, wenn man den uC einzeln kauft
>Bibliotheke sind nicht vorhanden, daher gehe ich davon aus.
ST liefert eine kostenlose Bibliothek für den STM32F4xx, als Zip Datei
ca. 400MB Stand heute
>Beim STM32 würde ich gerne versuchen, die Libs mithilfe>des Handbuchs zu schreiben
Lieber nicht, dann wirst du nie Land sehen. Starte mal
lieber mit den BSPs von ST
gadfg schrieb:> Lieber nicht, dann wirst du nie Land sehen.
Kommt drauf an, wo man hin will. Für etwas IO, ADC, DAC, UART, PLL und
Waitstates usw. braucht man keine Lib.
Soll es allerdings USB werden, sieht das anders aus. Erst recht, wenn
man auch noch Ethernet will, was wiederum ohne IP-Stack wenig Sinn hat.
Du hast genau die gleichen Anfängerfragen gestellt, die auch ich mir
gestellt habe. Ich bin sicher, dass meine Notizen für Dich hilfreich
sein werden: http://stefanfrings.de/stm32/index.html
Meine Notizen beziehen sich auf STM32F1 Controller, allerdings ist der
Unterschied zu STM32F4 nur gering - zumindest was diese Grundlagen
angeht.
Stefan U. schrieb:> Du hast genau die gleichen Anfängerfragen gestellt, die auch ich mir> gestellt habe. Ich bin sicher, dass meine Notizen für Dich hilfreich> sein werden: http://stefanfrings.de/stm32/index.html
Zitat 2. Satz: "Wer noch keine Erfahrung mit Mikrocontrollern hat, dem
empfehle ich, mit kleineren 8bit Controllern (z.B. Arduino Nano)
anzufangen."
Volle Zustimmung ;-)
gadfg schrieb:> Lieber nicht, dann wirst du nie Land sehen. Starte mal> lieber mit den BSPs von
Die Bibliotheken schreiben dürfte ja nicht das Problem sein. Die Header
Dateien vom hersteller existieren ja bereits.
>Warum wurde dann auf>http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die>Bibliothek neu programmiert, wenn bereits verfügbar?
Weil er es so haben wollte wie ER es programmiert hat.
Aber solche Dinge sind einem Dennis natürlich noch fremd.
Dennis schrieb:> Warum wurde dann auf> http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die> Bibliothek neu programmiert, wenn bereits verfügbar?
Weil die ST-Libs zwar ziemlich generisch sind, aber dafür auch einen
gewaltigen Overhead beinhalten. Wenn man beispielsweise schnell IO-Pins
toggeln möchte, ist dieser Overhead einfach zuviel.
Das ist auch kein Wunder, wenn man statt eines Registerzugriffes lieber
einen Pointer auf ein Struct übergibt und dann mit einer Schleife und
einem case-switch den Register-Zugriff macht.
Heute bedeutet Software-Entwicklung auf komplexen Plattformen wie PCs
oder Smartphones im Wesentlichen, daß man bestehende Frameworks mit ein
bißchen glue logic zusammenpappt. Die Performance ist ausreichend
(meistens), und das alles selber entwickeln würde zu lange dauern.
Deswegen fühlt sich allerdings heute auch ein Multicore mit 3 GHz nicht
schneller an als ein Singlecore mit 1 GHz vor 15 Jahren.
Embedded macht man das oftmals nicht, weil man zum einen nicht die
Ressourcen hat, und weil man zum anderen mehr optimiert, damit man
dieselbe Aufgabe mit einem schwächeren und damit billigeren Controller
hinbekommt.
Und an holger, Dein zweiter Satz war einfach überflüssig.