Forum: Mikrocontroller und Digitale Elektronik CMSIS, ASF & Co.


von Uwe M. (drosiusingolf)


Lesenswert?

Guten Abend Freunde der Elektronik!

An meinem Lebensabend beschäftige ich mich aus Interesse und Spaß mit 
den Arm Cortex Controllern, HW und Programmierung. Zu meinem Background: 
Als Dipl. Ing. E-Technik (FH) a.D. hatte ich bis etwa 2001 in der 
Automobilzulieferbranche Steuergeräte programmiert auf hardwarenaher 
Ebene, bevor ich dann ganz in die HW umgestiegen bin für den Rest meiner 
Entwicklerlaufbahn. Dabei fiel mir bei den Motorola/Freescale (heute 
NXP) Controllern auf, man hat die Treiber damals selber geschrieben, 
sprich sich die IO Register selber bitweise vorgenommen, Libraries 
hierzu gab es zum Glück nicht, man konnte sich programmiertechnisch 
austoben. Heute gibt es gigantische Libraries, Codedschungels, wie CMSIS 
oder ASF, je nach Hersteller, in denen tausende Funktionen, Makros und 
Defines vereinbart sind, um Treiber damit zu schreiben. Sprich, ich muss 
in diesem Codedschungel mir das Passende mühsam zusammensuchen, wobei 
ich mir dann auch gelegentlich die Dokumentationen und den Code 
anschauen muss, um bei Unsicherheiten zu wissen, was wird da genau 
gemacht. Noch krasser ausgedrückt: Ich kann keine Zeile hardwarenahen 
Code selbstständig schreiben ohne permanent in CMSIS, ASF und Co. 
herumzusuchen. Ich käme mir da hilflos vor, erinnert mich an betreutes 
Denken! Ob man diese zahlreichen vorgegebenen Funktionen, Makros und Co. 
alle im Kopf behält, darf bezweifelt werden. Im Grunde genommen muss man 
doch doppelte, zeitaufwendige Arbeit leisten: Erst das Reference Manual 
verstehen, was muss programmiert werden, dann die Suche nach passendem 
Code, statt diesen eben mal selber zu designen, was ja einfach ist.

Daher meine Frage: Ist das der heutige hardwarenahe Programmierstil, mit 
Hilfe von diesen gigantischen Libraries zu programmieren, was ist der 
Sinn, denn Zeitersparnis kann ich mir überhaupt nicht vorstellen, eher 
das krasse Gegenteil. Und beim Thema Fehlerfreiheit habe ich auch 
erhebliche Zweifel, weil diese Funktionen und Macros einen großen 
Funktionsbereich und viele Controller einer Familie abdecken müssen, was 
die Komplexität drastisch erhöht und folglich die Fehlerquote, nicht nur 
beim Programmierer, auch beim Hersteller.

Mit den Argumenten lesbarer Code, Softwareengeeneering braucht man mir 
nicht kommen, solchen Code kann man auch selbst designen mit den 
Originalnamen aus den Reference Manuals, dazu braucht man kein betreutes 
Denken.

Ich will hier keinen Religionskrieg anzetteln bei den Gurus dieser 
Libraries, und hoffe daher auf eine sachliche Diskussion. Gerne lasse 
ich mich eines Besseren belehren!
Gruß

Uwe

von Neverever (Gast)


Lesenswert?

Uwe M. schrieb:
> Ich will hier keinen Religionskrieg anzetteln bei den Gurus dieser
> Libraries


Nein, willst Du bestimmt nicht bei Verwendung von Vokabeln wie 
"gigantisch"...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

CMSIS selbst ist ein eher minimalistisches Teil, von ARM herausgegeben 
und gepflegt, damit man sich nicht jeden Kleinkram „an den Hacken 
ablaufen“ muss. Da ist halt auch sowas drin wie Gestatten und Verbieten 
von Interrupts und dergleichen. Das sollte man durchaus nehmen.

Dinge wie ASF sind dagegen ziemlich aufgebläht, Abstraktionen über viele 
Schichten, viel Overhead. Um irgendwo ein Registerbit zu setzen, füllt 
man eine Struktur mit allen Details aus, ruft eine Funktion auf, die 
dann gleich die Welt retten will …

Wofür wir ASF hin und wieder benutzt haben ist, um ein "vendor 
approved"-Beispiel für die Behandlung einzelner Details zu bekommen, 
oder um komplette Codebeispiele zu haben, wie man bspw. einen USB-PHY 
anspricht. Aber von da erschien es uns dann oft sinnvoller, unseren 
eigenen Code zusammenzuhacken.

von Johnny B. (johnnyb)


Lesenswert?

Uwe M. schrieb:
> Daher meine Frage: Ist das der heutige hardwarenahe Programmierstil, mit
> Hilfe von diesen gigantischen Libraries zu programmieren, was ist der
> Sinn, denn Zeitersparnis kann ich mir überhaupt nicht vorstellen, eher
> das krasse Gegenteil.

Da liegst Du aber gänzlich daneben.
Heutzutage wird z.B. von jedem Popelgerät erwartet, dass es 
Schnittstellen wie USB, Ethernet, Bluetooth, etc. hat, damit man es in 
die Industrie 4.0 integrieren kann oder es der Servicetechniker mit 
einem 0815 Tablet konfigurieren kann.
Nun ist aber kaum ein kleiner Hardwareentwickler im Stande, in 
angemessener Zeit einen industrietauglichen TCP/IP Stack oder 
Bluetoothstack zu entwickeln. Daher bedient man sich halt dann eines 
fertigen Stacks und dass dieser die eigene Applikation nicht stört, 
nimmt man sich halt gleich noch ein passendes RTOS dazu, mit dem man 
alles schön kapseln kann.
Anders gesagt, man hat oft keine andere Wahl als möglichst viele 
bestehende Libraries zu nutzen, damit man einestages auch mal fertig 
wird mit der Entwicklung und sie an den Kunden ausliefern kann.

von TrollJäger (Gast)


Lesenswert?

Johnny B. schrieb:
> Da liegst Du aber gänzlich daneben.

Na ja, Ansichtssache...

Fertige Stacks hat man auch früher gerne genommen, gerade für TCP/IP 
oder USB. Darum geht es hier aber denke ich nicht.

von Stefan F. (Gast)


Lesenswert?

CMSIS Core enthält im Grunde genommen die Register definitionen.

Alles was darüber hinaus geht soll das Programmieren erleichtern, wobei 
ich das genau so kritisch siehe, wie du Uwe.

Ich hatte mir mal Cube MX und Cube HAL von ST angesehen. Mein ersten 
beiden Programm funktionierten nicht, weil der HAL Code fehlerhaft war. 
Außerdem ist es mir zu umständlich, neben dem Reference Manual auch noch 
zusätzlich das Manual der HAL lesen zu müssen um dann am Ende bei jeder 
5. Zeile Code zusätzlich auch noch den Quelltext der HAL lesen zu 
müssen, um deren Anwendung zu verstehen.

Bedenke auch, dass diese Libraries offensichtlich auch dem Zweck dienen, 
die an den jeweiligen Hersteller zu binden.

So weit ich kann, schreibe ich mir meine Funktionen also lieber selber, 
auf Basis der CMSIS Core. Für Ethernet und USB verwende ich mangels 
Know-How aber doch fertige Libraries. Ich habe hier Glück, denn für 
"meine" STM32 Controller habe ich da gleich zwei Beispiele gefunden, die 
ohne HAL funktionieren.

Es ist allerdings schon so, dass die Benutzung von Hersteller-Libraries 
zunimmt und bei einigen Chips sogar unvermeidbar ist. Zum Beispiel beim 
ESP8266, ESP32, Raspberry Pi. Da kommt sicher noch mehr. Die klassische 
Trennung von "x macht die Hardware, ich mache die Software" ist von den 
Herstellern nicht mehr gewollt.

von Uwe M. (drosiusingolf)


Lesenswert?

Johnny B. schrieb:
> Da liegst Du aber gänzlich daneben.

Ok, bei komplexen Funktionen wie USB, Ethernet, ja, da hast du absolut 
Recht! Die zu programmieren wären Diplomarbeiten. Da würde ich erwarten, 
daß man diese Funktionen als Binaries einbindet ähnlich einer printf() 
in stdio.h. Darum geht es aber nicht, denn selbst einfachste Funktionen 
wie GPIO Bits setzen, resetten,
Uart, I2C, SPI, ADC, Timer werden auf Registerebene unterstützt. Warum 
wird hier nicht fertiger Objectcode wie beim printf() Beispiel 
geliefert? Ok, bei Timern müssten viele Funktionen existieren wegen 
derer Komplexität, besonders bei Motor control, aber wo ist das Problem? 
Irgendwie habe ich den Eindruck, das Rad wird jedesmal neu erfunden...

von Uwe M. (drosiusingolf)


Lesenswert?

Stefanus F. schrieb:
> Es ist allerdings schon so, dass die Benutzung von Hersteller-Libraries
> zunimmt und bei einigen Chips sogar unvermeidbar ist.


Stefanus, ein beängstigender Trend, wenn ich an SIL3 oder 4 Projekte 
denke, und man eine black box vor sich hat, wo man erst einmal nicht 
genau weiß, was in der Wundertüte drin ist. Sicherlich kann man alles 
debuggen, ein Wahnsinnsaufwand, aber im Zusammenspiel mit anderen 
Elektroniken, z.B. über Netzwerk und Realtime wird es verdammt 
schwierig... Ehrlich gesagt, bei solchen Projekten bete ich Compiler an, 
ja keinen Mist zu machen, da auch eine black box.

von Peter S. (Gast)


Lesenswert?

Naja, es gibt halt nach wie vor beides. Wir haben Device-Treiber für 
sicherheitskritischen Code sowohl selbst geschrieben, als auch fertige 
Libraries verwendet. Man muss halt wissen wie man mit OTS-Software 
umgehen muss.
Wobei CMSIS tatsächlich schon einigermaßen brauchbar ist. Im Gegensatz 
zum Schrott, den es teilweise von den MCU-Herstellern gibt.

von Johannes S. (Gast)


Lesenswert?

Uwe M. schrieb:
> Als Dipl. Ing. E-Technik (FH)

Und wenn dir ein Informatiker sagen würde deine Hardware ist viel zu 
kompliziert und einfacher ist viel besser? Die ganzen Schutzdioden sind 
total überflüssig und kosten nur?

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
Noch kein Account? Hier anmelden.