Forum: Mikrocontroller und Digitale Elektronik ADA lernen JA/NEIN? Einstieg in Embedded Systems.


von David (limeout)


Lesenswert?

Hallo Community,

ich möchte mich intensiver mit Embedded Systems und Echtzeitsystemen 
beschäftigen, finde aber den richtigen Einstieg nicht so recht.

Im Studium habe ich ein wenig mit ADA (Ravenscar-Subset) auf 
STM32-Boards gearbeitet. Als Hobby habe ich außerdem erste Erfahrungen 
mit dem ESP32 und FreeRTOS gesammelt sowie grundlegende Programmierung 
mit AVR und C ausprobiert.

Nun frage ich mich, welcher Weg langfristig am meisten Sinn ergibt. 
Besonders ADA mit Ravenscar hat mir viel Spaß gemacht: Die Sprache 
wirkte auf mich sehr logisch, robust und durchdacht – auch wenn die 
Programmierung teilweise etwas umständlich war.

Ich bin mir unsicher, ob es sich lohnt, tiefer in ADA einzusteigen, oder 
ob meine Zeit in anderen Sprachen besser investiert wäre. Hat jemand von 
euch Erfahrung damit? Welche Sprachen und Tools werden heutzutage 
typischerweise für Echtzeitsysteme eingesetzt? Ist ADA noch relevant 
oder eher ein Auslaufmodell?

Beeindruckt hat mich z.B. dieses Projekt hier – eine kleine 
2D-Physik-Engine in ADA:
https://github.com/Kidev/DemoAdaPhysics2D
Allerdings ist das verwendete Board auch schon über 10 Jahre alt und mit 
rund 50 € definitiv nicht das günstigste.

Wie seht ihr das? Hat ADA noch eine Zukunft in der Embedded-Welt – oder 
ist es eher ein Relikt vergangener Tage?

Ich freue mich auf eure Meinungen und Erfahrungen!

von Nemopuk (nemopuk)


Lesenswert?

Programmiersprachen kommen und gehen  wie unterschiedliche 
Schraubendreher. Interessanter sind die Produkte, die nan damit baut. 
Wenn du irgendeine eine Programmiersprache drauf hast  sammle damit 
Erfahrung. Diese auf eine andere Sprache umzusetzen, ist im Vergleich zu 
anderen Aufgaben eine der einfachen. Es ist besser, in wenigstens einer 
Programmiersprache sehr gut zu sein, als in vielen auf Anfänger Lebel.

von Vanye R. (vanye_rijan)


Lesenswert?

> Wie seht ihr das? Hat ADA noch eine Zukunft in der Embedded-Welt – oder
> ist es eher ein Relikt vergangener Tage?

In der Embedded Welt hat derzeit nur ein Relikt vergangener Tage eine 
Zukunft und das heisst C. Vielleicht noch C++. Es gibt auch ein paar die 
bruellen jedem ins Ohr das die Zukunft Rust sein wird, aber solange die 
noch bruellen ist das sehr sehr unsicher.

Aber zum programmieren gehoert sehr viel mehr als eine 
Programmiersprache. Sowas ist nur eine austauschbare Grundlage.

Vanye

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Erster Post von einer Neuanmeldung. Ist denn heute schon Freitag? Ach 
ne, nur langes Wochenende.

Für diejenigen, die irgendwann später diesen Thread finden weil sie 
wirklich das Problem haben:

Als "Studierter" in der Softwareentwicklung sollte man mehr können und 
wollen als nur Kodieraffe zu spielen.

Programmiersprachen sind nur ein kleiner Teilaspekt der 
Softwareentwicklung. Man baut seine Karriere nicht um eine 
Programmiersprache oder ein Tool herum auf. Zumindest nicht als 
"Studierter" der Karriere machen will statt nur Kodieraffe zu sein.

Programmiersprachen sind Handwerk von denen man mehrere kann. Was gerade 
benötigt wird. Man ist in der Lage sich schnell noch eine weitere drauf 
zu schaffen wenn es gefragt wird.

Spezifisch für ADA:

ADA spielt sich hauptsächlich in Nischen in der Luft- und Raumfahrt und 
in der Verteidigung ab. Kurz: Fliegt und/oder macht Bum. In 
Programmiersprachen-Indizes wie TIOBE ist ADA aus gegebenem Anlass 
aufsteigend (aktuell Platz 15 in TIOBE, vor 12 Monaten noch 22. 
Langzeitkurve über Jahrzehnte allerdings absteigend [1]).

Aktuelle findet man auf 
https://de.indeed.com/q-ada-programmierung-jobs.html sechs "ADA"-Jobs. 
Bei gerade mal zwei scheint es wirklich um die Programmiersprache zu 
gehen. Dabei in beiden Fällen als "nett zu können" gewünscht, kein 
absolutes Muss. Branche? Fliegt und macht Bum.

Wenn man da hin will und dort in eine ADA-Nische, dann lernt man halt 
mal ADA. Das schreibt man unten in seine Bewerbung mit rein. Nach den 
anderen Fähigkeiten mit denen man glänzen möchte. Neben all den anderen 
Programmiersprachen die man kann.

__
[1] Programmiersprachen-Indizes sind mit Vorsicht zu genießen.

: Bearbeitet durch User
von David (limeout)


Lesenswert?

Jup, ok Boomer.

Habe die Kernaussage verstanden. Programmiersprachen sind Werkzeuge und 
und manche eignen sich besser für einen Job als andere. Und Tischler ist 
man nicht dann, sobald man die Kreissäge beherrscht.

Kodieraffe möchte plane ich nicht zu werden, sondern ich möchte 
hobbymäßig qualitative, robuste Embedded Systeme entwerfen und suche das 
richtige Werkzeug dafür. In der Hoffnung Tipps von Experten zu erhalten 
bot sich dieses Forum an.

Danke dennoch für die Aufklärung.

von Oliver S. (oliverso)


Lesenswert?

David schrieb:
> ich möchte
> hobbymäßig qualitative, robuste Embedded Systeme entwerfen und suche das
> richtige Werkzeug dafür.

Das Merkmal eines Hobbies ist das Fehlen der Sinnanforderung. Ob du da 
Basic, Assembler, ADA, oder Brainfuck verwendest, ist dein reines 
Privatvergnügen.
Hilfreich ist es aber in all den Fällen, daß es eine brauchbare und gut 
verfügbare Toolchain für die Hardware deiner Wahl gibt.

Abgesehen davon brauchts zum Entwurf eh gar keine Programmiersprache.

Oliver

von Harald K. (kirnbichler)


Lesenswert?

David schrieb:
> Jup, ok Boomer.

Bist Du jetzt enttäuscht, weil Deine Begeisterung für Ada nicht geteilt 
wird?

von Ralf D. (doeblitz)


Lesenswert?

David schrieb:
> Kodieraffe möchte plane ich nicht zu werden, sondern ich möchte
> hobbymäßig qualitative, robuste Embedded Systeme entwerfen und suche das
> richtige Werkzeug dafür. In der Hoffnung Tipps von Experten zu erhalten
> bot sich dieses Forum an.

Wenn du es hobbymäßig für dich alleine machen willst: tu es.
Wenn du dich mit gleichgesinnten austauschen willst: such mal nach "ADA" 
in Foren wie diesem. Dann siehst du, wieviele sich darüber mit dir 
potentiell unterhalten könnten/würden. Wenn du kaum Treffer bekommst, 
dann solltest du eher die Finger davon lassen. Verbreitet sind eben 
immer noch C, C++ und Assembler. <schulterzuck>

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

David schrieb:
> Welche Sprachen und Tools werden heutzutage typischerweise für
> Echtzeitsysteme eingesetzt?
Auf der ganz harten Echtzeit im us-Bereich: C und C++. Wenn langsamer 
auch reicht: Java und Python. Aber in der Industrie programmiert kein 
Mensch in Ada.

> Nun frage ich mich, welcher Weg langfristig am meisten Sinn ergibt.
Dann schau mal von deinem "habe ich im Studium 
kennengelernt"-Suppenteller auf in die weite Welt hinein. Dann stellt 
sich diese Frage ganz anders: Was willst du in 10 Jahren machen?

von Pandur S. (jetztnicht)


Lesenswert?

Anwendungen .. Weltraum, Hochsicherheit. Seltsamerweise nicht 
Automotive.

Der Vorteil von ADA ... stark typisiert und durchgesetzt. Mehrdeutige 
Konstrukte wurden definiert, resp entfernt, sodass der Code maximal 
Lesbar und sicher ist. Man kann sich darauf verlassen, dass der Code 
macht, was er soll. Kein uups, Klammer vergessen und nicht gesehen. Kein 
Eingerueckt und daher Kommentar. Mit extensiven Checks gleich eingebaut
zB
var u:integer range 0..10_000
// irgendwo muss natuerlich definiert werden was bei ueberlauf 
geschieht.

Und Ada unterstuetzt Tasks und parallele Konzepte direkt in der Sprache, 
ohne spezielle Konstrukte ohne Libraries.

 task ABC is
  entry READ( ..)
  entry WRITE(..)
 end;

 task body ABC is
 TABLE: ...
  loop
   select
    accept READ( ...)
    end
   or
    accept WRITE(...)
    end
   or terminate
   end select
  end loop

Wobei obiges Konstrukt einem WaitMultipleObject entspricht, welches 
sonst eine eher aufwendige Geschichte ist. Hinter einem "select" steht 
ein semaphorengeschuetzter Eingang, allenfalls auch eine Warteschlange.


Der Nachteil .. der Preis des Compilers. Es ist nahezu unendlich 
aufwendig einen Compiler zertifizieren zu lassen. Fuer die Compiler gibt 
es Testsuites, welche durchlaufen werden muessen. Bedeutet der Compiler 
passt auf den Controller. Konfigurationsfehler darf es natuerlich nicht 
geben.

Ich hab grad nachgeschaut, es gibt Referenzmanuals fuer 20$, zur 
Inspiration. Meins war noch eine Ecke teurer.
Ich empfehl ein Studium davon, ohne es einzusetzen. Mir war der Compiler 
damals zu teuer. Ich mag mich noch an etwas von gegen 10k erinnern, fuer 
einen 8086, wobei ein Turbopascal fuer 100$ erhaeltlich war.

: Bearbeitet durch User
von Bruno V. (bruno_v)


Lesenswert?

David schrieb:
> Kodieraffe möchte plane ich nicht zu werden, sondern ich möchte
> hobbymäßig qualitative, robuste Embedded Systeme entwerfen und suche das
> richtige Werkzeug dafür.

Am Ende ist es Code in einer formalen Sprache. Ob 
Matlab/Simulink/Stateflow, C/C++ oder UML. Kodieraffen sind heute 
genauso selten wie Tippsen.

Und lass Dich nicht täuschen: Entwürfe in UML oder anderen 
"High-Level"-Sprachen sind oft eher vage Ideen unverstandener Genies.

von Florian (flori_n)


Lesenswert?

Die Frage ist halt, was du damit machen willst.
David schrieb:
> Welche Sprachen und Tools werden heutzutage
> typischerweise für Echtzeitsysteme eingesetzt?
Auf die Allgemeinheit bezogen, C und C++. Oder ein Betriebssystem kommt 
drauf und dann wird 'ganz normal' programmiert.

Soweit ich mitgekriegt habe, wird ADA in besonders sicherheitskritischen 
Bereichen verwendet, weil es von sich aus schon ziemlich sicher ist. 
Rust könnte ADA vielleicht ablösen, hat sich aber bisher noch nicht 
eindeutig durchgesetzt.

Ich würde sagen:
Wenn du ADA besonders magst, programmier ADA.
Wenn du allgemein Embedded Systems programmieren willst, nimm C oder 
C++.
Wenn du in den Sicherheitsbereich gehen willst, informiere dich über ADA 
und Rust.

von Martin S. (strubi)


Lesenswert?

Ada (Merke, keine Abkuerzung, wie 'ADA' suggeriert) ist schon nicht so 
doof, und wird auch noch verwendet. Die Firma Adacore bietet immer noch 
eine gut gewartete Toolchain an und der gnat-Compiler tickert hier in 
der Continuous Integration.

Fuer die Hardware-Ansteuerung nehme ich dann aber doch lieber schlicht 
C, der Sprachenmischmasch laesst sich per Gnu-Compiler ja problemlos 
linken.

Aber wie schon gesagt Nische und nur fuer Safety-Geschichten sinnvoll, 
wo die Anforderungen entsprechend stehen. Sonst laesst sich auch ein 
C-Code entsprechend fuer Safety verifizieren.

Ist halt ein bisschen verbose/geschwaetzig, was gegenueber der 
Unlesbarkeit von Rust aber schon Vorteile beim re(verse)-Engineering 
hat. Siehe auch endlose Diskussionen zum verwandten VHDL.

von Vanye R. (vanye_rijan)


Lesenswert?

> Siehe auch endlose Diskussionen zum verwandten VHDL.

Wurde das nicht von System-C abgeloesst? Oder ist es in einer 
internationalen Welt wo alle cool auf English stehen nicht Zeit auf 
Verilog zu wechseln? :-p

Vanye

von Lotta  . (mercedes)


Lesenswert?

Vanye R. schrieb:
>> Siehe auch endlose Diskussionen zum verwandten VHDL.
>
> Wurde das nicht von System-C abgeloesst? Oder ist es in einer
> internationalen Welt wo alle cool auf English stehen nicht Zeit auf
> Verilog zu wechseln? :-p
>
> Vanye

Ne dumme Frage:
Ist VHDL und Verilog nicht ne "Zusammenbausprache", ich
beschreib ja damit ein Modell?
Ada ist ja ne Programmiersprache, kann man die trotzdem
mit VDHL vergleichen?

lotta.

von David (limeout)


Lesenswert?

Danke an alle, die ihre Einschätzungen geteilt haben. Ich werde Ada 
vorerst ad acta legen und mir zunächst fundiertes Wissen zu 
Mikrocontrollern, Embedded- und Echtzeitsystemen aneignen und lernen, 
wie man diese Systeme in C programmiert.

Ich denke, das ist langfristig einfach sinnvoller. Sobald die 
Wissensbasis vorhanden ist, kann ich mir mit Ada immer noch ein neues 
„Werkzeug“ erschließen.

Mir ist klar geworden, dass die Programmiersprache, in der man Embedded 
Systems entwickelt, nur einen kleinen Teilaspekt der gesamten 
Entwicklung ausmacht. ;)

Danke dafür.

Galigrü David

von Florian (flori_n)


Lesenswert?

Lotta  . schrieb:
> Ist VHDL und Verilog nicht ne "Zusammenbausprache", ich
> beschreib ja damit ein Modell?
> Ada ist ja ne Programmiersprache, kann man die trotzdem
> mit VDHL vergleichen?
Auch wenn die Konstrukte unterschiedliche Auswirkungen haben, gibt es 
deutliche Überschneidungen. Zuweisungen, Bedingungen und Schleifen 
braucht man zum Beispiel in Beschreibungs- und Programmiersprachen. Da 
liegt dann die Ähnlichkeit.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Florian schrieb:
> Lotta  . schrieb:
>> Ist VHDL und Verilog nicht ne "Zusammenbausprache", ich
>> beschreib ja damit ein Modell?
>> Ada ist ja ne Programmiersprache, kann man die trotzdem
>> mit VDHL vergleichen?
> Auch wenn die Konstrukte unterschiedliche Auswirkungen haben, gibt es
> deutliche Überschneidungen.

So ist es. Es ist vor allem die (IHMO schreckliche ;-)) Syntax und
weniger die Semantik, die VHDL von Ada geerbt hat.

Aus https://en.wikipedia.org/wiki/VHDL:
1
Influenced by
2
Ada,[1] Pascal
3
4
Due to the Department of Defense requiring as much of the syntax as
5
possible to be based on Ada, in order to avoid re-inventing concepts
6
that had already been thoroughly tested in the development of
7
Ada,[citation needed] VHDL borrows heavily from the Ada programming
8
language in both concept and syntax.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

David schrieb:
> Ich werde Ada
> vorerst ad acta legen und mir zunächst fundiertes Wissen zu
> Mikrocontrollern, Embedded- und Echtzeitsystemen aneignen und lernen,
> wie man diese Systeme in C programmiert.
Jaaa....
Das scheint mir ein brauchbarer Ansatz zu sein.

Wobei ich über ADA nicht viel sagen kann, außer dass es mir im Data 
General AOS/VS Umfeld begegnet ist. Da hatten "wir" einen solchen 
Compiler und ein paar ADA Anwendungen im Einsatz.
Also: Mehr als ein Seepferdchen ist da nicht dran.

Den Freischwimmer habe ich, ungefähr zur gleichen Zeit, auf DG/UX und 
SCO Xenix in C gemacht.
C++ ist erst viel später, mit Arduino, bei mir aufgetaucht.

Wie auch immer, ich empfehle mit C++ zu beginnen.
Es kann viele C Quellen einfach so mit übersetzen.
Zumindest kann man C Objekt Dateien recht problemlos in C++ 
Hauptprogramme linken.
C++ ist gegenüber C deutlich mächtiger, OOP, Templates, Operator 
Überladungen usw.

Verallgemeinerungen:
Wer C++ lernt, lernt die C Grundlagen gleich mit. Automatisch.
Wer einmal eine prozedurale Sprache (z.B. C) richtig gelernt hat, hat es 
meist mit der OOP viel schwerer, als wenn er gleich damit angefangen 
wäre.
Klarer: Der Paradigmenwechsel ist nur in eine Richtung leicht.

: Bearbeitet durch User
von Lotta  . (mercedes)


Lesenswert?

Yalu X. schrieb:
> Florian schrieb:
>> Lotta  . schrieb:
>>> Ist VHDL und Verilog nicht ne "Zusammenbausprache", ich
>>> beschreib ja damit ein Modell?
>>> Ada ist ja ne Programmiersprache, kann man die trotzdem
>>> mit VDHL vergleichen?
>> Auch wenn die Konstrukte unterschiedliche Auswirkungen haben, gibt es
>> deutliche Überschneidungen.
>
> So ist es. Es ist vor allem die (IHMO schreckliche ;-)) Syntax und
> weniger die Semantik, die VHDL von Ada geerbt hat.
>
> Aus https://en.wikipedia.org/wiki/VHDL:
>
>
1
> Influenced by
2
> Ada,[1] Pascal
3
> 
4
> Due to the Department of Defense requiring as much of the syntax as
5
> possible to be based on Ada, in order to avoid re-inventing concepts
6
> that had already been thoroughly tested in the development of
7
> Ada,[citation needed] VHDL borrows heavily from the Ada programming
8
> language in both concept and syntax.
9
>

> Aus https://en.wikipedia.org/wiki/VHDL:
Boahhh, das ist ja ne neue Welt. :-O   Da besteht ja wirklich
ein Zusammenhang zwischen den Sprachen!

Lotta.

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

1
P_M_DERIVE(T_ALG.E_BH) := UC_16S_EN_16NS (TDB.T_ENTIER_16S
2
                                   ((1.0/C_M_LSB_BH) *
3
                                   G_M_INFO_DERIVE(T_ALG.E_BH)))

Obige Zeile ADA-Code führte 1996 zu einen Schaden in Höhe von mehreren 
hundert Millionen Euro. Und das obwohl derselbe Code all die Jahre zuvor 
es bestens tat und "seinem Schöpfer" in Lohn und Brot hielt.

Die Grund für diesen Zweck-Umkehr ist nicht im Code sondern im System 
(hier Wertebereich Sensor) zu suchen. Insofern biste mit "robuste 
Embedded Systeme" schon in der richtigen Richtung unterwegs. Und viel 
lernt man aus Fehlern. Also ist es eigentlich wurscht welche 
verschiedenen Programmiersprachen mal erlernt, Hauptsache man lernt was 
grundlegend Neues und füllt sich nicht mit kalten Kaffee ab.

Also mein Tipp ist daher, sich eher ein exotisches System zaufzubauen 
(bspw. DIY-PCB mit Padauk MCU) und from the scratch aka vom Datenblatt 
weg zu programmieren. Dann beginnt man, das System zu verstehen.

PS: Ref. für den Code oben: https://de.wikipedia.org/wiki/Ariane_V88

von Bradward B. (Firma: Starfleet) (ltjg_boimler)


Lesenswert?

> Ist VHDL und Verilog nicht ne "Zusammenbausprache", ich
> beschreib ja damit ein Modell?
> Ada ist ja ne Programmiersprache, kann man die trotzdem
> mit VDHL vergleichen?

ADA und VHDL teilen sich die selbe Entstehungsgeschicht, beide stammen 
von Department of Defense der USA, resp. wurden von diesen als die von 
ihren "Zuliefern" zu verwendeten Sprachen vorgeschrieben. Und dienten zu 
Beginn hauptsächlich zur Überprüfung der Requirements (auf 
Vollständigkeit/Widersprüche/...)  und weniger der endgültigen 
Implementierung.
Das man aus ADA wie aus Verilog/VHDL ausführbaren Code bekommt, wurde da 
eher als "Zugabe" verstanden.

ADA und VHDL haben beide auch bestimmte "Features" die reine 
Programmiersprachen nicht kennen, wie "ranges" (Wertebereiche/Teilmengen 
von Typen) und Konstrukte zu Modellierung parall ("concurrently") 
laufender Funktionen ("tasks" resp. "processes")

https://www.accessengineeringlibrary.com/content/book/9780071545815/back-matter/appendix4

von Markus F. (mfro)


Lesenswert?

Pandur S. schrieb:
> er Nachteil .. der Preis des Compilers. Es ist nahezu unendlich
> aufwendig einen Compiler zertifizieren zu lassen.

Für "hobbymäßig" braucht man keinen zertifizierten Compiler - gnat ist 
kostenlos und braucht sich vor jenen auch nicht zu verstecken.

: Bearbeitet durch User
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.