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.
gadfg schrieb: > ST liefert eine kostenlose Bibliothek für den STM32F4xx, als Zip Datei > ca. 400MB Stand heute Warum wurde dann auf http://mikrocontroller.bplaced.net/wordpress/?page_id=2698 die Bibliothek neu programmiert, wenn bereits verfügbar?
>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.
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.

