Treiberentwicklung für 32-Bit-Mikrocontroller

#7427205
Lesenswert?

Was hat das Thema mit der Registerbreite des µC zu tun?

Das ist eher eine Frage des Schnittstellentyp (Block/Char, Sync/Async), der Anforderungen und des Konzepts.

Das lernt man nicht aus Büchern, sondern aus Erfahrung und ggf. durch "abgucken" bei Leuten die sowas können.

OP #7427296
Lesenswert?

Gibt es eine Treiberentwicklung ausschließlich, wenn man ein RTOS hat?

Beispiele findet man zu STM 32 HAL?

https://www.youtube.com/watch?v=qNLE3yK2k7Q

Gibt es so etwas auch auf Deutsch? (Dieser Ultra FX oder wie der hieß, hatte er nicht damals zu diesem Thema einiges produziert?) Und werden dabei auch alle gängigen Industriestandards berücksichtigt?

Nutzt man in der Industrie auch den ESP32? Oder ist dort nur noch der ARM Cortex R/M relevant? Wird noch ein AVR oder 8051 eingesetzt?

#7427302
Lesenswert?

Max schrieb:

Gibt es eine Treiberentwicklung ausschließlich, wenn man ein RTOS hat?

Beispiele findet man zu STM 32 HAL?

https://www.youtube.com/watch?v=qNLE3yK2k7Q

Gibt es so etwas auch auf Deutsch? (Dieser Ultra FX oder wie der hieß, hatte er nicht damals zu diesem Thema einiges produziert?) Und werden dabei auch alle gängigen Industriestandards berücksichtigt?

Nutzt man in der Industrie auch den ESP32? Oder ist dort nur noch der ARM Cortex R/M relevant? Wird noch ein AVR oder 8051 eingesetzt?

Was hat das mit dem Thema zu tun?

Treiber benötigt man unabhängig von der Plattform immer.

Programmieren ist ein wenig wie Kochen. Die wichtigsten Zutaten sind

  • Können
  • Fantasie
  • Kreativität

Das "Können" kann man lernen, aber die anderen 2 Punkte kann man unter dem Begriff "Talent" zusammenfassen - das hat man oder eben nicht.

Sobald eine dieser Zutaten fehlt, mag das Ergebnis satt machen, aber es wird eben wie typischen "Kantine-Frass" schmecken und schlimmstenfalls sogar ungesund sein.

Gast #7427337
Lesenswert?

Max schrieb:

Gibt es so etwas auch auf Deutsch?

In der Branche solltest du das nicht fragen. An Englisch führt kein Weg vorbei.

Gibt es eine Treiberentwicklung ausschließlich, wenn man ein RTOS hat?

Nein, hat auch niemand gesagt.

Nutzt man in der Industrie auch den ESP32?

Ja, z.B. in Wallboxen.

Oder ist dort nur noch der ARM Cortex R/M relevant?

Nein

Wird noch ein AVR oder 8051 eingesetzt?

Ja und ja

Warum fragst du eigentlich nach Treibern? Was hast du vor?

(Firma: tsx89) Persönliche Seite #7427346
Lesenswert?

Suche auf Ebay nach Displays oder irgendwelche Peripherie - Auf jeden Fall sollte ein Datenblatt sowie Registerbeschreibungen dafür auffindbar sein - Und leg einfach los. Naja so würde ich es machen, wenn ich "dieses Bedürfnis*" hätte, Treiber zu schreiben.

Wenn du für so ein "Allerwelts-Gerät" z.B. HD4470 oder BMP280 eine Ansteuerung schreibst, und nicht weiter kommst, kannst du jederzeit Hilfe in anderen Referenzen finden. Will sagen: Fang besser mit etwas "kleinerem und normalen" an, was auch ein anderer versteht oder schon gemacht hat - um dein Ergebnis zu vergleichen!

Außerdem gibt es ja kaum "direkte" 32-Bit Peripherie, außer du willst z.B. einen PCI-Bus bauen. Dein Host Mikrocontroller sollte seine "Treiber / SDK" für seine Internals in der Regel schon selber mitbringen!

Mein "erster eigener Treiber" war für ein Noritake Grafik-VFD mit 8 Bit Bus - Das Pinout und Beschreibung sowie Register Infos waren über mehrere verschiedene Datenblätter anderer VFDs verteilt, und einiges musste ich selber Zusammenreimen und ergänzen, weil es einfach kein Datenblatt oder Fertig-Treiber dafür gab.

Wie immer: Übung macht den Meister. Und Registerbreite ist tatsächlich total egal! Viel Spaß.

Gast #7427372
Lesenswert?

Max schrieb:

Tut mir leid, leider kann ich mit den Antworten nicht viel anfangen,

Beantworte du doch erst mal die Rückfragen! Deine Eingangsfrage ist immer noch unklar, daher hat noch (fast) keiner versucht, sie zu beantworten.

Fange nochmal von vorne an:

Max schrieb:

Treiberentwicklung für 32-Bit-Mikrocontroller

Stefan F. schrieb:

Was ist denn für dich ein Treiber?

Arduino F. schrieb:

Definiere: "Treiberentwicklung"

Stefan F. schrieb:

Warum fragst du eigentlich nach Treibern? Was hast du vor?

#7427378
Lesenswert?

Es gibt kein vorgegebenes Kochrezept für "Treiber".

Überlege Dir, welche Funktionalitäten Du mit Deinen "Treibern" abstrahieren willst, definiere die entsprechende API (Sprich Funktionen, Strukturen / Datentypen - wenn wir mal von C ausgehen) und fülle diese danach mit Inhalt für den ersten Controllertyp.

Dann hast Du Deinen ersten Treiber fertig.

Je nachdem wie gut Du am Anfang Deine API definiert hast, wirst Du später, wenn Du den gleichen Treiber für andere Controller programmierst, evtl. Änderungen oder Erweiterungen vornehmen wollen/müssen.

Grundsätzlich sollte man in so einem Treiber jegliche direkten Hardwareabhängigkeiten abstrahieren.

#7427654
Lesenswert?

Allenfalls waere noch interessant worum's geht. Ein Treiber ist eine Abstraktion. Da wird mit kurzem Code in einem Interrupt etwas rumgeschaufelt, und dann gibt's ein Signal an das Main, resp an den weiter bearbeitenden Task. Dazu kommt noch eine Konfiguration, eine Initialisierung, ein Statuswechsel, ..

Und das ist eben schon verschieden von Kontext zu Kontext. Muss ein ADC 500 Punkte sammeln, oder ein grafischer Display upgedated werden ?

#7427932
Lesenswert?

Markus M. schrieb:

Es gibt kein vorgegebenes Kochrezept für "Treiber".

Das ist erstmal NICHT richtig. Fast immer gibt die Umgebung (also das OS) das Kochrezept vor.

Nur dann, wenn kein OS involviert ist, dann kann man das Kochrezept selber festlegen.

Grundsätzlich sollte man in so einem Treiber jegliche direkten Hardwareabhängigkeiten abstrahieren.

Das ist MIST. Dieser Ansatz führt nämlich oft dazu, dass Features der Hardware "wegabstrahiert" werden. Das ist zumindest der worst case.

Viel öfter aber führt es dazu, dass Hardware-Features einfach nur mit neuen Namen versehen werden. Der Code bleibt dabei natürlich so hardwareabhängig, wie er ist, aber es kostet richtig Aufwand, herauszufinden, dass er es ist und warum er es ist, weil das Datenblatt wegen eben dieser Namensverwirrung nicht mehr als Referenz dienen kann.

Das ist das, was bei schwachsinnigen Abstraktionen wie etwa der ST-HAL oder auch dem QTouch-Scheiß von Atmel rauskommt. Sowas dient einzig dem Vendor-LockIn.

(Firma: Gast) #7427940
Lesenswert?

C-hater schrieb:

Das ist MIST. Dieser Ansatz führt nämlich oft dazu, dass Features der Hardware "wegabstrahiert" werden. Das ist zumindest der worst case.

Nein, das ist durchaus vernünftig.

Beispiel, ein eingebauter serieller Peripheriebaustein, welcher wahlweise I2C, UART, SPI usw. kann. Da macht es durchaus Sinn die jeweils unnützen Features "weg zu abstrahieren" (wie du es nennst). Den worst Case würde hier eine "Gottklasse" darstellen, mit viel zu vielen Haaren dran.

Vergleichbares gilt für Timer, mit ihren Modi.

Selbst für Pins. Einem OpenDrain Pin z.B. beim AVR8(welcher das gar nicht von Hause aus kann) die Möglichkeit zu nehmen, den Pin auf Output+High setzen zu können.

#7427983
Lesenswert?

Max schrieb:

Treiberentwicklung für 32-Bit-Mikrocontroller.

Das könnten mehrere Aspekte sein, die meisten gelten für "normale" Entwicklung ebenso:

  • Codierkonzepte (Benennung, Architektur, Kopplung/Kapselung)
  • Plattformunabhängigkeit (endianess, HAL, 2/4 Byte int (und nein, int-typen mit bitbreite lösen das nicht))
  • Sprachen (welche Version C++)
  • Effizienz (Optimierung auf Takte, ram, rom, worst Case, ... )
  • genutzte Standards (Posix, rtos, boost, ...)
  • Konkrete HW (Displays, I2C Sensoren, ...)
  • Rein SW (Fifos, Speicher, tastenentprellung, TCP/IP Stack)
  • Konfig/Tayloring
  • ...

Vielleicht ist es andersrum besser: was für Treiber kennst Du oder hast Du schon entwickelt?

#7428124
Lesenswert?

Markus M. schrieb:

Grundsätzlich sollte man in so einem Treiber jegliche direkten Hardwareabhängigkeiten abstrahieren.

Es gibt daher auch immer Hardwaretreiber und Softwaretreiber. Der HW-Treiber liefert z.B. Putpixel und der SW-Treiber zeichnet damit Kreise, Buchstaben usw. Oder der HW-Treiber liefert CAN-tx, CAN-rx und der SW-Treiber baut daraus CANopen usw.

#7428155
Lesenswert?

C-hater schrieb:

Grundsätzlich sollte man in so einem Treiber jegliche direkten Hardwareabhängigkeiten abstrahieren.

Das ist MIST. Dieser Ansatz führt nämlich oft dazu, dass Features der Hardware "wegabstrahiert" werden. Das ist zumindest der worst case.

Es kommt darauf an. Wenn das Ziel Portabilität ist, wird es vermutlich dazu kommen, dass man nur die wichtig(st)en Features implementiert, die für die Anwendung notwendig sind.

Aber die Frage vom TO ist ja so ungenau erstellt, da kann man viel schreiben.

Das ist das, was bei schwachsinnigen Abstraktionen wie etwa der ST-HAL oder auch dem QTouch-Scheiß von Atmel rauskommt. Sowas dient einzig dem Vendor-LockIn.

ACK. Diese "HALs" sind weder Fisch noch Fleisch.

#7428167
Lesenswert?

Schau Dir mal als Beispiel für eine Art "Treiber" das FatFs von Chan an: http://elm-chan.org/fsw/ff/00index_e.html Das ist ein modular aufgebautes FAT Dateisystem für eine breite Palette von Controllerarchitekturen (8-32 bit) und Speichermedien. Dateisystem und hardwarenahe I/O sind klar voneinander getrennt. Ich finde das Paket gut strukturiert und dokumentiert.

Ich habe das vor langer Zeit für AVR Controller und SD/MMC karten verwendet, funktioniert tadellos. Selbst Siemens nutzt(e?) diese Bibliothek für die LOGO Kleinsteuerungen.

Moderator Persönliche Seite #7428212
Lesenswert?

Max schrieb:

Tut mir leid, leider kann ich mit den Antworten nicht viel anfangen

Treiber schreibt man, um ein Gerät für ein Betriebssystem verfügbar zu machen. Dafür benutzt man eine geregelte, für das Betriebssystem festgelegte Schnittstelle.

Für Mikrocontroller gibt es in der Regel kein Betriebssystem bzw. Du hast auch keines genannt. Von daher ist Deine Frage nicht sinnvoll.

Wenn Deine Frage schon nicht sinnvoll ist, was erwartest Du dann von den Antworten?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren