Forum: Mikrocontroller und Digitale Elektronik Einstieg auf Microcontrollern mit modernen Programmiersprachen


von Thorsten R. Ollemann (Gast)


Lesenswert?

Im Zusammenhang mit dem Einstieg in Microcontroller gibt es immer wieder 
die C vs. Assembler Debatte. Mit Assembler programmiert man den 
Microcontroller in seiner nativen Sprache und hat maximale Kontrolle. C 
ist portabel und in den richtigen Händen nicht langsamer oder 
resourcenfressender als Assembler.

Allerdings ist K&R-C inzwischen 40 Jahre alt. Für viele 
Anwendungsbereiche haben sich inzwischen mächtigere und effizientere 
Programmiersprachen etabliert.

Gerade im Hinblick auf die anstehende Vernetzung durch MCUs im Internet 
of Things, muss man sich doch die Frage stellen, ob es nicht Zeit ist 
auch hier mit der Zeit zu gehen? Es ist Zeit, sich von der 
SPS/Blinky/Ich-muss-jedes-Byte-kontrollieren Mentalität zu lösen.

Welche Kandidaten gibt es hier?

Javascript? Hat sich als de-Fakto Standard für Web-Anwendungen 
durchgesetzt. Mit node.js sogar auf der Serverseite. Was spricht gegen 
den Einsatz auf Microcontrollern?

Go? Finde ich sehr spannend, und der C-Erfinder arbeitet ja auch daran.

Java?

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Thorsten R. Ollemann schrieb:
> C
> ist portabel und in den richtigen Händen nicht langsamer oder
> resourcenfressender als Assembler.

... und erheblich einfacher in der Anwendung.

Nach meinen erfahrung (in einem Anfall von Wahn hatte ich das mal
probiert), liegt Assembler klar vor C: Faktor ca. 1,6.

In der Zeit für die Programmentwicklung tut man sich in C
ganz erheblich einfacher.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Joachim Drechsel schrieb:
> ... und erheblich einfacher in der Anwendung.
>
> Nach meinen erfahrung (in einem Anfall von Wahn hatte ich das mal
> probiert), liegt Assembler klar vor C: Faktor ca. 1,6.

Yep, und je nach Anwendung gibt es den gleichen Faktor dann noch einmal 
zwischen C und moderneren Sprachen.

von MaWin (Gast)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Was spricht gegen den Einsatz auf Microcontrollern?

Alles.

Javascript wird nicht mal auf Syntaxfehler beim hochladen auf den uC 
überprüft, deine Waschmaschine könnte beim Schleudern mit einem 
Syntaxfehler abstürzen.

Vergiss also Scriptsprachen.

Nehmen wir Java: Ja, wird auf dicken Microcontrollern mit Gigabytes an 
Speicher verwendet, und der ist dann üblicherweise auch voll: Android 
Smartphones.

Für alles, was kleiner ist, also offensichtlich unbrauchbar.

Ebenso ergeht es objektorientierten C, obwohl natürlich viele uC heute 
grösser und schneller sind als es die ersten PC und Mac je waren.

Aber die hat man auch nicht mit objektorientiertem Ballast programmiert, 
sondern mit PL/M oder Pascal.

Hat man aber 1MB oder mehr, kann man durchaus C++ nutzen, man muss ja 
nicht so grausam uneffektiv programmieren wie auf aktuellen PCs.

Die hobbyüblichen haben aber selten 1MB, manchmal nur 1kB, da bleibt 
dann nur Assembler.

von Kein Name (Gast)


Lesenswert?

Bin zu dem Ergebniss gekommen - Diese Frage lässt sich nur hiermit 
beantworten:
http://www.random.org/coins/

von Thorsten R. Ollemann (Gast)


Lesenswert?

MaWin schrieb:
> Alles.
>
> Javascript wird nicht mal auf Syntaxfehler beim hochladen auf den uC
> überprüft, deine Waschmaschine könnte beim Schleudern mit einem
> Syntaxfehler abstürzen.

Das ist ein einfach zu lösendes Problem. Man überpruft die Software 
einfach vor dem hochladen. Es spricht auch nichts dagegen, Javascript 
vorzucompilieren.

Übrigens gibt es bereits Javascript für microcontroller:
http://www.espruino.com/

MaWin schrieb:
> Nehmen wir Java: Ja, wird auf dicken Microcontrollern mit Gigabytes an
> Speicher verwendet, und der ist dann üblicherweise auch voll: Android
> Smartphones.

Ja und? 512kb flash und 128kb sram gibt es bereits jetzt für 
Kleckerbeträge.

Und so viel braucht man nicht:

http://www.harbaum.org/till/nanovm/index.shtml

> Ebenso ergeht es objektorientierten C, obwohl natürlich viele uC heute
> grösser und schneller sind als es die ersten PC und Mac je waren.

Arduino basiert auf C++.

Insgesamt klingt das für mich eher nach dem üblichen "Haben wir immer 
schon so gemacht, was neues brauchen wir nich"-Argument. Es ändern sich 
aber eben doch Dinge:

- Microcontroller werden in extrem komplexe Netzwerke eingebunden.
- 32 Bit hält Einzug in Billigst-Controller.

von greg (Gast)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Allerdings ist K&R-C inzwischen 40 Jahre alt.

In diesem ursprünglichen C-Dialekt programmiert man heute auch nicht 
mehr. Aktuell ist C99 bzw. C11, und das ist schon deutlich moderner.

> Für viele
> Anwendungsbereiche haben sich inzwischen mächtigere und effizientere
> Programmiersprachen etabliert.

Aber nicht auf (kleineren) Mikrocontrollern. Wenn's hochkommt ist mit 
Einschränkungen C++ möglich. Sprachen, die eine virtuelle Maschine 
und/oder Garbage Collection verwenden oder interpretiert werden, kann 
man auf Mikrocontrollern praktisch kategorisch ausschließen. Wenn GC 
verwendet wird, kann man Echtzeit vergessen, und wenn kein nativer Code 
ausgeführt wird, ist das einfach zu lahm und speicherfressend. Weiterhin 
hat man das Problem, dass moderne High-Level-Programmiersprachen 
umfangreiche Bibliotheken mitbringen, die für die sinnvolle Nutzung der 
Sprache essentiell sind. Auf einen Mikrocontroller passen die aber 
niemals rauf, da kann man nicht mal schnell ein paar Megabyte 
verschwenden.

von Kein Name (Gast)


Lesenswert?

So ein STM32F429-Discovery ist billiger als ein Touch LCD alleine.

Wenn Thorsten eine Java Entwicklungs-Umgebung dafür zusammen stellen 
will - was spricht dagegen? Vielleicht wird es ein Erfolg wie der 
Arduino. Vielleicht passt nicht mal die Library in den Speicher.

Sollte aber mal jemand ausprobieren.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Die Frage ist ja auch, was für eine Art von Devices im 
Aruduino-Preissegment noch auftauchen werden. Es bahnen sich eine Menge 
interessanter und sehr mächtiger SoCs für IoT und Wearable-Anwendungen 
an:

http://androidcommunity.com/mediatek-tipped-to-be-aiming-for-cheap-wearables-for-china-20140203/

Aster wird in Stückzahlen bei deutlich unter $10 liegen.

Auf so einem Device interessiert die C vs. ASM Frage einfach nicht mehr.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Kein Name schrieb:
> Wenn Thorsten eine Java Entwicklungs-Umgebung dafür zusammen stellen
> will - was spricht dagegen? Vielleicht wird es ein Erfolg wie der
> Arduino. Vielleicht passt nicht mal die Library in den Speicher.

Wie oben gepostet, es gibt eine javavm für ATMega8:

http://www.harbaum.org/till/nanovm/index.shtml

von greg (Gast)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Insgesamt klingt das für mich eher nach dem üblichen "Haben wir immer
> schon so gemacht, was neues brauchen wir nich"-Argument. Es ändern sich
> aber eben doch Dinge:

Es gab doch schon genug Experimente in dieser Richtung. Moderne 
Hochsprachen funktionieren einfach nicht ordentlich auf 
Mikrocontrollern. NanoVM ist doch ein super Beispiel dafür: ein nettes 
Experiment, aber in der Praxis unbenutzbar:
1
What the NanoVM is and what it isn't
2
3
There seems to be some confusion about what the NanoVM is and can do and what it can't and isn't.
4
5
It is not a full featured Java VM and it will never be. It will always be limited to a small subset of the java language and the standard java libraries and a few application specific methods. Furthermore, it is not meant to replace C as the standard way of programming microcontrollers. It is less flexible and has a lower performance than C or assembler programs.

> - Microcontroller werden in extrem komplexe Netzwerke eingebunden.

Meinst du Sensornetze & co? Gerade da kann man doch 
ressourcenverschwendende Programmierung überhaupt nicht gebrauchen, da 
zählt jedes µA, damit der Akku länger mitmacht.

> - 32 Bit hält Einzug in Billigst-Controller.

Ja, aber das heißt nicht, dass man dann auf Billigst-Controllern große 
Mengen Flash und RAM hat. Die billigen ARMs haben auch nur wenige KB.

Das höchste der Gefühle wäre Lua, das ist optimiert für geringen 
Ressourcenverbrauch. eLua z.B., aber da sollte man schon 256 KB Flash 
und 64 KB RAM mitbringen.

von Thorsten R. Ollemann (Gast)


Lesenswert?

greg schrieb:
> Es gab doch schon genug Experimente in dieser Richtung. Moderne
> Hochsprachen funktionieren einfach nicht ordentlich auf
> Mikrocontrollern.

... funktioniert nicht auf alten Microcontrollern. Was in den Formfaktor 
Microcontroller passt, ändert sich aber gerade gewaltig.

greg schrieb:
> Mikrocontrollern. NanoVM ist doch ein super Beispiel dafür: ein nettes
> Experiment, aber in der Praxis unbenutzbar:

Naja, ein Mega8 ist aber auch der Stand von vor 10 Jahren. Die nanovm 
auch.

greg schrieb:
> Meinst du Sensornetze & co? Gerade da kann man doch
> ressourcenverschwendende Programmierung überhaupt nicht gebrauchen, da
> zählt jedes µA, damit der Akku länger mitmacht.

Ressourcenverschwendung muss aber nicht nur im Device, sondern auch in 
der Entwicklung vermieden werden. An einem $10 Produkt kann niemand ein 
Jahr lang herumfrickeln, auch wenn es um 100000er Stückzahlen geht.

In Sensornetzen sind die kritischen Stromfresser ja auch die Tranceiver 
und Sensoren selbst. Ob die CPU 10% oder 12% beiträgt ist nicht 
ausschlaggebend.

greg schrieb:
> Das höchste der Gefühle wäre Lua, das ist optimiert für geringen
> Ressourcenverbrauch. eLua z.B., aber da sollte man schon 256 KB Flash
> und 64 KB RAM mitbringen.

Das stimmt. Lua ist eine gute Option.

von Wolfgang W. (Gast)


Lesenswert?

Ich bin begeistert vom .NET Micro Framework (NETMF).
Man ist in der Entwicklung rasend schnell, und hat duch den Gadgeteer 
Standard auch irrsinnig schnell erste Erfolge und Prototypen zusammen 
gestellt. Wenn man C# gewohnt ist, gibt es so gut wie garkeine Hürden 
bei der Entwicklung. Einziges Manko: es ist nicht für realtime 
Anwendungen konzipiert.
Es kommt hald auf den Anwendungsfall an. Wenn ich eine Applikation mit 
einer Kamera, einem Display und einigen Sensoren erstellen möchte, dann 
habe ich das mit dem .Net Micro Framework innerhalb eines Tages 
zusammen. Wenn ich jedoch beispielsweise einen Quadrokopter bauen 
möchte, werde ich damit relativ schnell an die Grenzen stoßen. Hier ist 
ein normaler Mikrocontroller definitiv die bessere Wahl.

Gruß W

von Yalu X. (yalu) (Moderator)


Lesenswert?

Von welcher Sorte Mikrocontroller sprechen wir?

Es gibt nach wie vor ganz mickrige 8-Bit-Controller, die sich nur in
Assembler sinnvoll programmieren lassen.

Auf der anderen Seite gibt es Quad-Core-ARMs mit Taktfrequenzen im
GHz-Bereich, riesigem Adressraum und virtueller Speicherverwaltung, auf
denen man (bei entsprechendem Speicherausbau) praktisch jede
Programmiersprache aus dem PC-Bereich verwenden kann.

Und schließlich gibt es noch – ziemlich fein abgestuft – alles zwischen
diesen beiden Extremen.


Von welcher Sorte von Programmen sprechen wir?

Ein Programm, dass direkt mit Hardwareregistern interagiert und
Prozessabläufe auf 10µs genau steuern muss, stellt andere Anforderungen
an die Programmiersprache als eine Smartphone-App. Während man im
High-Level-Bereich zwischen Hunderten von Programmiersprachen auswählen
kann, gibt es im hardwarenahen Bereich nur wenig Auswahl.

: Bearbeitet durch Moderator
von innerand i. (innerand)


Lesenswert?

Thorsten R. Ollemann schrieb:

> Allerdings ist K&R-C inzwischen 40 Jahre alt. Für viele
> Anwendungsbereiche haben sich inzwischen mächtigere und effizientere
> Programmiersprachen etabliert.
>
> Gerade im Hinblick auf die anstehende Vernetzung durch MCUs im Internet
> of Things, muss man sich doch die Frage stellen, ob es nicht Zeit ist
> auch hier mit der Zeit zu gehen? Es ist Zeit, sich von der
> SPS/Blinky/Ich-muss-jedes-Byte-kontrollieren Mentalität zu lösen.

Man könnte sich auch mal fragen, warum sich C so lange gehalten hat und 
weshalb sich außer den Compiler-Herstellern heute überhaupt noch jemand 
mit Assembler auseinander setzt.
Das liegt vielleicht gar nicht daran, dass die µC Programmierer so 
innovationsfeindlich wären und sie das Bit-Schupfen so geil fänden. Die 
machen das vielleicht ganz einfach deshalb, weil es für das was sie 
machen notwendig ist.

Je höher die Programmiersprache wird umso weiter abstrahiert man sich 
von der Maschine. So ein Java Programmierer weiß überhaupt nicht mehr 
was die Maschine auf der sein Programm läuft macht. Fragen Sie den mal 
wie lange die Ausführung seines Codes dauern wird. Der wird sie komisch 
ansehen und nicht verstehen warum das relevant sein sollte.

Bei den Mikrocontrollern geht es aber um technische Probleme. Da ist 
Zeit sehr relevant (Stichwort Echtzeitsystem) und das ganze soll 
natürlich auch stabil sein. Man muss da einfach wissen was die Maschine 
macht und auch das sie das macht was sie soll.

Bei Mikrocontrollern ist man schon alleine aufgrund ihres 
Einsatzgebietes immer sehr nahe an der Hardware und man kann sich daher 
natürlich auch nur begrenzt von ihr abstrahieren.
Und auch im PC-Bereich ist man sehr schnell wieder bei C und Assembler 
wenn es zum Beispiel um Betriebssystem-Kern oder Treiberprogrammierung 
geht.
Wie weit man sich von der Maschine abstrahieren kann hängt eben immer 
vom Anwendungsfall ab.

Die µCs werden heute meiner Meinung nach ganz einfach deshalb noch von C 
und Assembler dominiert, weil es hier das Anwendungsgebiet ganz einfach 
nicht erlaubt sich weiter von der Hardware zu entfernen. Da geht es eben 
um Technik und nicht um Klicki-Bunti.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Wolfgang W. schrieb:
> Ich bin begeistert vom .NET Micro Framework (NETMF).
> Man ist in der Entwicklung rasend schnell, und hat duch den Gadgeteer
> Standard auch irrsinnig schnell erste Erfolge und Prototypen zusammen
> gestellt. Wenn man C# gewohnt ist, gibt es so gut wie garkeine Hürden
> bei der Entwicklung. Einziges Manko: es ist nicht für realtime

Sieht superspannend aus.

http://www.netmf.com

Allerdings ist auf der Site nicht all zu viel Los? Fast keine Projekte, 
letztes Forenposting vor 11 Tagen. Gibt es irgendwie ein 
Beispielprojekte mit Source usw, ohne dass man sich das ganze Framework 
installieren muss?

von Olaf (Gast)


Lesenswert?

> Allerdings ist K&R-C inzwischen 40 Jahre alt. Für viele
> Anwendungsbereiche haben sich inzwischen mächtigere und effizientere
> Programmiersprachen etabliert.

Du laberst Quatsch. Gerade fuer Microcontroller hat sich C Hersteller- 
uebergreifend etabliert. Marktdurchdringung vermutlich so 99%. Und das 
schon seit >15Jahren. Jeder in der Branche kann C oder er ist draussen. 
Es gibt bergeweise alten Code denn man weiter verwenden kann.

Die Sprache muss einem nicht gefallen, aber es ist gut so das es nur 
eine gibt.

> Gerade im Hinblick auf die anstehende Vernetzung durch MCUs im Internet
> of Things,

BINGO! Was hab ich gewonnen?

> muss man sich doch die Frage stellen, ob es nicht Zeit ist
> auch hier mit der Zeit zu gehen?

Die Frage darfst du stellen, aber die Antwort ist nein. All diese 
modernen Schickimickisprachen brauchen naemlich mehr Resourcen. Das 
bedeutet das in jedem produziertem Geraet der Controller dann nicht mehr 
40-60Cent sondern 2-3Euro kostet. Wenn du soetwas baust dann machst du 
pleite. Das nennt man Marktwirtschaft. Ausserdem braucht dein dicker 
Controller dann mehr Strom. Ich muss mit 30mW fuer ein komplettes System 
auskommen.
Gerade an den Android-Handys sieht man doch was da fuer ein Muell bei 
rausgekommen ist.


Fuer groessere Projekte wuerde ich eine objektorientierte Sprache wie 
C++ auch besser und angemessen finden. (Aber ganz bestimmt nicht den 
hirntoten Griff ins Klo wie Java) Das Problem ist nur du brauchst 
zwingend Leute als Programmierer die von der Hardwareseite kommen, die 
eine Vorstellung davon haben was ein Microcontroller ist, sonst kommt da 
naemlich auch nur abstrahierter Mist bei rum. Diese Leute tun sich aber 
alle mit objektorientierten Sprachen sehr schwer. Das duerfte der 
eigentliche Grund sein warum keiner soetwas verwendet.

Was ich als sinnvoll ansehen wuerde das waere eine C-aehnliche Sprache 
die um eine Syntax fuers Multitasking erweitert ist. Aber das wird 
einfach nicht kommen weil C eben den Markt absolut beherscht.

Olaf

von greg (Gast)


Lesenswert?

Yalu X. schrieb:
> Von welcher Sorte Mikrocontroller sprechen wir?
>
> Es gibt nach wie vor ganz mickrige 8-Bit-Controller, die sich nur in
> Assembler sinnvoll programmieren lassen.
>
> Auf der anderen Seite gibt es Quad-Core-ARMs mit Taktfrequenzen im
> GHz-Bereich, riesigem Adressraum und virtueller Speicherverwaltung, auf
> denen man (bei entsprechendem Speicherausbau) praktisch jede
> Programmiersprache aus dem PC-Bereich verwenden kann.
>

Naja, die Dinger nennt man aber nicht mehr Mikrocontroller. Die sind 
auch nicht voll integriert, da braucht man externen RAM und externen 
Flash.

Das fetteste, was man voll integriert als Mikrocontroller vermarktet zu 
kaufen bekommt, hat irgendwas bei 200 MHz Taktfrequenz, Flash um 1-2 MB 
herum und RAM um die 256 KB.

> Von welcher Sorte von Programmen sprechen wir?

Da hier irgendwas von 10 USD Produktpreis erzählt wurde... wohl nicht 
letzteres. ;)

von greg (Gast)


Lesenswert?

greg schrieb:
>> Von welcher Sorte von Programmen sprechen wir?
>
> Da hier irgendwas von 10 USD Produktpreis erzählt wurde... wohl nicht
> letzteres. ;)

Korrektur: das sollte eine Antwort auf "Von welcher Sorte 
Mikrocontroller sprechen wir?" sein.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Yalu X. schrieb:
> Von welcher Sorte Mikrocontroller sprechen wir?

Das ist eine gute Frage. Es scheint im Moment einen fließenden Übergang 
zu immer mächtigeren SoCs in immer einfacheren Systemen zu geben. Wo ist 
die Grenze zwischen einem SoC wie Aster, einem STM32F4 und einem AVR?

Yalu X. schrieb:
> Von welcher Sorte von Programmen sprechen wir?

Grenzen wir es vielleicht auf alles, was Arduino kann und will, ein. 
Damit sind ausdrücklich auch vernetzte Sensoranwendungen eingeschlossen.

> Ein Programm, dass direkt mit Hardwareregistern interagiert und
> Prozessabläufe auf 10µs genau steuern muss, stellt andere Anforderungen
> an die Programmiersprache als eine Smartphone-App. Während man im
> High-Level-Bereich zwischen Hunderten von Programmiersprachen auswählen
> kann, gibt es im hardwarenahen Bereich nur wenig Auswahl.

Ja, Echtzeit wird eine Domäne der klassischen Microcontrollern mit C 
bleiben. Allerdings ist zu beobachten dass immer mehr Anwendungen gar 
keine harten Echtzeitanforderungen mehr haben. z.B. bekommen die 
Sensoren immer mehr eigene Intelligenz. Vor 10 Jahren musste man zur 
Auswertung eines Drehratensensors das Ausgangssignal per ADC auslesen 
und mit harten Echtzeitanforderungen aufintegrieren. Jetzt kommt ein 
Quaternion mit Zeitstempel aus dem FIFO.

von Wolfgang W. (Gast)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Wolfgang W. schrieb:
> Ich bin begeistert vom .NET Micro Framework (NETMF).
> Man ist in der Entwicklung rasend schnell, und hat duch den Gadgeteer
> Standard auch irrsinnig schnell erste Erfolge und Prototypen zusammen
> gestellt. Wenn man C# gewohnt ist, gibt es so gut wie garkeine Hürden
> bei der Entwicklung. Einziges Manko: es ist nicht für realtime
>
> Sieht superspannend aus.
> http://www.netmf.com
>
> Allerdings ist auf der Site nicht all zu viel Los? Fast keine Projekte,
> letztes Forenposting vor 11 Tagen. Gibt es irgendwie ein
> Beispielprojekte mit Source usw, ohne dass man sich das ganze Framework
> installieren muss?

https://www.ghielectronics.com/community
Hier ist das eigentliche Forum mit Projekten, Sourcecode und 
interessanten Beiträgen

von Christian B. (casandro)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Allerdings ist K&R-C inzwischen 40 Jahre alt. Für viele
> Anwendungsbereiche haben sich inzwischen mächtigere und effizientere
> Programmiersprachen etabliert.


a) 40 Jahre sind für eine Programmiersprache nicht alt. COBOL (darauf 
laufen nicht-Investment-Banken) ist von 1959, Fortran (damit wird das 
Wetter vorhergesagt) ist von 1957. Lisp (damit überprüfen 
Mikrochiphersteller ihre Designs auf logische Fehler, AutoCAD ist darin 
programmiert) ist von 1958. C wurde 1969 angefangen und ist somit 
relativ neu. Bedenke, es gibt sehr viele Programmiersprachen die nach 
10-20 Jahren (quasi) aussterben, obwohl sie anfangs populär waren. 
(Rexx, PL/1, usw)

b) Diese Sprachen sind für die diese Anwendungsbereiche optimiert. Mit 
awk wirst Du Dich zum Beispiel schwer tun eine Steuerung zu 
programmieren. Die Stärke von C ist es, keine besonders gute oder 
effiziente Programmiersprache sein zu wollen. Deshalb lagert der 
erfahrene C-Programmierer Code in Datenstrukturen aus wann immer es 
komplex wird. Das Ergebnis ist eine de-facto Programmiersprache die 
genau an die Anforderungen angepasst ist.

Lese Dir mal das hier durch: http://catb.org/esr/writings/taoup/html/
Wenn Du mit den Meinungen nicht übereinstimmst, ist C vielleicht nicht 
die richtige Sprache für Dich.

von Thorsten R. Ollemann (Gast)


Lesenswert?

Wolfgang W. schrieb:
> https://www.ghielectronics.com/community
> Hier ist das eigentliche Forum mit Projekten, Sourcecode und
> interessanten Beiträgen

Aha, und es gibt auch einen Port für das STM32F429-Discovery board. Dann 
sollte ich mir mal eins zulegen.

von Christian B. (casandro)


Lesenswert?

Übrigens eine kleine Anmerkung. Wenn Du eine sehr kleine Hochsprache für 
Mikrocontroller suchst, nimm Forth. Das ist so das meiste "Bang for the 
Buck". Da reden wir dann von wenigen Kilobytes für den Forth Compiler... 
der dann auf dem Mikrocontroller läuft und in den Du zur Laufzeit neuen 
Code rein bringen kannst. Dabei fällt so nebenbei eine Kommandozeile ab. 
:)

von Thorsten R. Ollemann (Gast)


Lesenswert?

Christian Berger schrieb:
> a) 40 Jahre sind für eine Programmiersprache nicht alt. COBOL (darauf
> laufen nicht-Investment-Banken) ist von 1959, Fortran (damit wird das
> Wetter vorhergesagt) ist von 1957. Lisp (damit überprüfen
> Mikrochiphersteller ihre Designs auf logische Fehler, AutoCAD ist darin
> programmiert) ist von 1958. C wurde 1969 angefangen und ist somit
> relativ neu. Bedenke, es gibt sehr viele Programmiersprachen die nach
> 10-20 Jahren (quasi) aussterben, obwohl sie anfangs populär waren.
> (Rexx, PL/1, usw)

Das sind allerdings alles Beispiele, bei denen es eine existierende 
Codebasis gab, die weiter gepflegt wurde. Niemand wird ein neues 
Datenbankprojekt in Cobol anfangen, oder eine FEM-Bibliothek in Fortran.


Christian Berger schrieb:
> b) Diese Sprachen sind für die diese Anwendungsbereiche optimiert. Mit
> awk wirst Du Dich zum Beispiel schwer tun eine Steuerung zu
> programmieren. Die Stärke von C ist es, keine besonders gute oder

Klar, und bei den embedded Systems tun sich gerade einige neue 
Anwendungsbereiche auf. Die Konsequenz ist dann doch eigentlich klar?

Christian Berger schrieb:
> Lese Dir mal das hier durch: http://catb.org/esr/writings/taoup/html/
> Wenn Du mit den Meinungen nicht übereinstimmst, ist C vielleicht nicht
> die richtige Sprache für Dich.

ESR...

von Thorsten R. Ollemann (Gast)


Lesenswert?

Christian Berger schrieb:
> Übrigens eine kleine Anmerkung. Wenn Du eine sehr kleine Hochsprache für
> Mikrocontroller suchst, nimm Forth. Das ist so das meiste "Bang for the
> Buck". Da reden wir dann von wenigen Kilobytes für den Forth Compiler...

Forth ist elegant, aber zu den aktuellen Prozessorarchitekturen nicht 
wirklich kompatibel.

Ich verstehe auch nicht wo Sinn und Anwendungen für die 
Greenarray-Prozessoren von Chuck Moore zu suchen sind, aber vielleicht 
bin ich dafür zu blöd.

von Kai S. (kai1986)


Lesenswert?

Die Frage nach einer "guten" Programmiersprache und wie "modern" sie ist 
hat meiner Erfahrung nach nicht unbedingt was mit dem tatsächlichen 
Namen der Sprache zu tun. So ist es meiner Erfahrung nach viel 
wichtiger, einen gut lesbaren und leicht verständlichen Code zu 
erzeugen, als die Frage, in welcher Sprache ich das mache.
Ein vollkommen unverständliches Java Programm, bei dem der Programmierer 
die Variablen mit a b und c "durchnummeriert" hat ist nämlich "älter" 
als das gleiche Programm in C mit gut gewählten Namen und einem leicht 
verständlichen Aufbau.

Die Programme selbst benötigen je nach Sprache unterschiedliche viel 
Ressourcen, wobei der klare Trend ist: Je höher und abstrahierter die 
Sprache, desto mehr Ressourcen und desto höher auch der Energiebedarf. 
Und gerade der Energiebedarf wird immer wichtiger, da zum Einen Energie 
teuerer wird und zum Anderen immer mehr Geräte mit stark begrenzten 
Energiemengen auskommen müssen, die beispielsweise über Akkus 
bereitgestellt werden.

Ein weiterer Punkt düften auch die Kosten sein, die Sprache zu wechseln. 
Wenn beispielsweise von C auf Java umgestellt werden soll muss in C 
vorliegender Code nach Java portiert bzw. neu geschrieben werden, was 
Geld kostet.

Welche Sprache am Ende wirklich verwendet wird ist eher zweitrangig (was 
man ja auch an den vielen endlosen Diskussionen über Sprachen sieht), 
wichtiger ist es, die Sprache zu können und gut verständlich und 
wartbaren Quellcode zu schreiben.

Gruß Kai

von Christian B. (casandro)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Klar, und bei den embedded Systems tun sich gerade einige neue
> Anwendungsbereiche auf. Die Konsequenz ist dann doch eigentlich klar?

Naja, es gibt halt da nicht wirklich geeignete Sprachen. Es gibt zwar 
Modesprachen wie C++ oder C#, die irgendwie eierlegende Wollmilchsäue 
sein wollen, aber die einzigen halbwegs erfolgreichen Versuche einer 
"Embedded-Sprache" sind Fortran und BASIC.

Beide Sprachen haben gemein dass sie eine komplette 
Betriebssystemsumgebung mit bringen und es ermöglichen Code interaktiv 
auszuführen. Man muss nicht Code ändern, compilieren, drauf laden, 
ausprobieren, ändern, compilieren... sondern man kann zum Beispiel eine 
Funktion einfach mal mit neuen Parametern ausführen um was zu testen.

Das ist so die größte Gemeinsamkeit die man bei solchen Projekten hat.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Yalu X. schrieb:
>> Von welcher Sorte Mikrocontroller sprechen wir?
>
> Das ist eine gute Frage. Es scheint im Moment einen fließenden Übergang
> zu immer mächtigeren SoCs in immer einfacheren Systemen zu geben. Wo ist
> die Grenze zwischen einem SoC wie Aster, einem STM32F4 und einem AVR?

Auf diesem Aster, der jeweils 4MB Flash und RAM haben soll, dürfte es
kaum Einschränkungen in der Wahl der Programmiersprache geben. Mit so
viel RAM ist bei nicht allzu datenintensiven Anwendungen auch
automatische Speicherverwaltung möglich, wie sie von den meisten neueren
Pogrammiersprachen praktiziert wird. Ob, Assembler, C, C++, C#, Python,
Haskell oder was auch immer, ist hauptsächlich eine Frage der Anwendung
(bspw. Echtzeitanforderungen) und des persönlichen Geschmacks.

von Thomas D. (thomasderbastler)


Lesenswert?

Yalu X. schrieb:
> und des persönlichen Geschmacks.



Bascom..
Duck und weg.

: Bearbeitet durch User
von Thorsten R. Ollemann (Gast)


Lesenswert?


von c-hater (Gast)


Lesenswert?

Christian Berger schrieb:

> die einzigen halbwegs erfolgreichen Versuche einer
> "Embedded-Sprache" sind Fortran und BASIC.

Das halte ich für, vorsichtig ausgedrückt, eine äußerst gewagte These...

> Beide Sprachen haben gemein dass sie eine komplette
> Betriebssystemsumgebung mit bringen und es ermöglichen Code interaktiv
> auszuführen.

Das allerdings ist etwas, was man im µC nicht braucht und, viel 
wichtiger: oft auch garnicht will. Ich hätte jedenfalls ein Problem mit 
einem Controller eines A380-Triebwerks, dessen Firmware sich "on the 
fly" (hier im wahrsten Sinne des Wortes) ändern ließe. Das gäbe dem 
Terrorismus völlig neue Möglichkeiten...

> Man muss nicht Code ändern, compilieren, drauf laden,
> ausprobieren

Die Entwicklungsphase ist im Vergleich zur Nutzungsphase völlig 
irreleveant. Davon mal abgesehen dauert ein Kompilierungslauf mit Upload 
heute nur noch Sekunden oder sogar Bruchteile von Sekunden, je nach 
Umfang der Änderungen im Quelltext. Jedenfalls, wenn man nicht gerade 
OpenSource-Toolchains beschäftigt...

von BastiDerBastler (Gast)


Lesenswert?

Was ich mich gerade frage ist, wozu ineffiziente Programmiersprachen 
verwenden (die überaus effektiv in der Anwendung auf ihrer Problemdomäne 
sind!), wenn man keine Problemkomplexität hat, für die sie erschaffen 
wurden?
Bei den allermeisten µC-Programmen entsteht die Komplexität aus der 
technischen Sachlage, nicht aus der Komplexität der Programmiersprache.
Sobald man UI-Programme mit Drag&Drop, Multitasking und so einen Kram 
braucht, Interop etc., da ist man doch schon bei einem Smartphone.
Was versprichst Du Dir für einen Entwicklungseffizienz-Vorteil, eine 
Spannung in Javascript zu messen und dann einen Pin über einen 
querreferenziertes Lua-Skript zu setzen? Ich finde da überwiegen 
eindeutig die Nachteile.
Auch connectivity ist bei den Teilen doch sehr eingeschränkt, da braucht 
man eher eine gute Bibliothek, denn eine effektivere Programmiersprache.
Naja, meine Meinung...

Wobei es natürlich ohne Frage cool wäre, wenn man selbst auf µCs stets 
soviel Zeit und Strom verschleudern darf, wie auf ausgewachsenen PCs, 
zum hundertstel des Preises. Aber wozu dann noch PCs? :)

von BastiDerBastler (Gast)


Lesenswert?

Ich würde meinen Kommentar gerne zurückziehen, der T.R.Olle Mann ist ja 
hier nur zum T.R.Ollen unterwegs.

von Dr. Best (Gast)


Lesenswert?

Ada2012 ist eine moderne Sprache, die wunderbar für embedded geeignet 
ist. Compiler für AVR und ARM gibt es auch.

von Ulrich F. (Gast)


Lesenswert?

Habe mir das hier mal durch gelesen.....

Welche Sprache?

Das scheint ja hier im Forum ganz wichtig zu sein.
Eine Glaubensfrage, zumindest größtenteils.
Mit Priestern an allen Fronten.

Vergleichbar mit Schlüsselthemen in anderen Foren.
PHP -- OOP oder nicht, Singletons sind böse, usw.
Motorrad --- Welches ist das beste Öl, die besten Reifen ..

:-) Eine gute Gelegenheit mal ein bisschen Öl ins Feuer zu gießen :-)

Meine Lieblingssprache ist Forth!
Ganz eindeutig.
Verwende ich sie? Nöö... (kaum noch)

Mittlerweile hat sich bei mir ein gewisser Pragmatismus eingestellt. Es 
wird die Sprache eingesetzt, welche am besten "passt".

Die Frage ist dann natürlich, wie beurteilt man das?

Muss an der Zielplattform gespart werden, wirds eng mit Speicher und 
Zeit. Also bleibt fast nur Assembler. Sind reichlich Ressourcen 
vorhanden, ist die Sprache egal, Hauptsache sie gibts für das Zielgerät.
Dann werden andere Zielrichtungen interessanter.
Qualität der IDE. (wenn man ein Beißhölzchen vermisst, ist es die 
falsche)
Entwicklungszeit (z.B. fertige Libs nutzen können)
Sind alle im Team "warm" mit der Sprache?

von Stefan R. (srand)


Lesenswert?

Christian Berger schrieb:
> Lisp (damit überprüfen
> Mikrochiphersteller ihre Designs auf logische Fehler, AutoCAD ist darin
> programmiert)

Selbstverständlich ist AutoCAD nicht in Lisp programmiert.

AutoCAD beinhaltet aber einen Interpreter für eine Lisp-artige Sprache.

von Christian B. (casandro)


Lesenswert?

c-hater schrieb:
> Das allerdings ist etwas, was man im µC nicht braucht und, viel
> wichtiger: oft auch garnicht will. Ich hätte jedenfalls ein Problem mit
> einem Controller eines A380-Triebwerks, dessen Firmware sich "on the
> fly" (hier im wahrsten Sinne des Wortes) ändern ließe. Das gäbe dem
> Terrorismus völlig neue Möglichkeiten...

Wow! Entschuldigung aber die Aussage ist ziemlich doof. Denn wenn ein 
"Terrorist" Zugriff auf die Kommunikationsschnittstellen eines 
Triebwerks hat, dann kann er schon alles damit machen. Im einfachsten 
Falle schaltet er das einfach ab und blockiert weitere Kommunikation.

> Die Entwicklungsphase ist im Vergleich zur Nutzungsphase völlig
> irreleveant.

Das ist nicht richtig, denn je besser die Entwicklungsphase läuft, um so 
besser wird das Produkt. Jeder von uns kennt ja solche typischen 
"Wegwerfprodukte" bei denen die Entwickler das Teil gerade mal so 
hinbekommen haben. Leider kommen die halt immer öfter aus Deutschland. 
Auf TopGear lacht man sich schon halb tot über unsere Firmwarefehler in 
Autos.

> Davon mal abgesehen dauert ein Kompilierungslauf mit Upload
> heute nur noch Sekunden oder sogar Bruchteile von Sekunden, je nach
> Umfang der Änderungen im Quelltext. Jedenfalls, wenn man nicht gerade
> OpenSource-Toolchains beschäftigt...

Geil und jetzt noch gegen OpenSource ranten, das zeigt ja wirklich, dass 
Du ein totaler Überchecker bist.

von Erleuchteter (Gast)


Lesenswert?

Thorsten R. Ollemann schrieb:
> Das ist ein einfach zu lösendes Problem. Man überpruft die Software
> einfach vor dem hochladen.

Oh! Du hast Das Halteproblem gelöst? Wurdest Du schon für die 
Fields-Medaille vorgeschlagen? Hat sich Gödel aus seinem Grab erhoben?

von Achim_42 (Gast)


Lesenswert?


von Kai S. (kai1986)


Lesenswert?

Achim_42 schrieb:
> Micro Python: Python for microcontrollers

Naja, von der Ausführungsgeschwindigkeit wäre ich persönlich jetzt nicht 
gerade begeistert, wenn ich mir das Demovideo anschaue. Game of Life mit 
so nem dicken µC mit vielleicht 5 fps ist doch ziemlich erbärmlich. Aus 
nem ATMega mit 16 MHz schafft das in C geschrieben auf 128x64 Pixel ca. 
20 fps.

Das ist schon ein ganz gewaltiger Unterschied dafür, das vielleicht die 
Sprache etwas einfacher zu Programmieren ist.

Gruß Kai

von greg (Gast)


Lesenswert?

Kai S. schrieb:
> Achim_42 schrieb:
>> Micro Python: Python for microcontrollers
>
> Naja, von der Ausführungsgeschwindigkeit wäre ich persönlich jetzt nicht
> gerade begeistert, wenn ich mir das Demovideo anschaue. Game of Life mit
> so nem dicken µC mit vielleicht 5 fps ist doch ziemlich erbärmlich.

Und dazu erwähnen sie noch, dass das der Idealfall ist: Kein Heap wird 
genutzt, daher muss auch kein GC laufen.

So ein STM32F405 kostet übrigens alleine schon gut 10 EUR...

Nein, das überzeugt mich nicht. Wieder so ein "Experiment".

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.