Guten Abend Community,
habe jetzt länger mit der Arduino IDE gearbeitet und würde nun auf
besseres Werkzeug umsatteln.
Kurz und knapp gefragt. Welche Sprache hat eine grosse Community und ist
zukunftssicher? Bei der Arduino Community gab es sehr viel Hilfe und
verständliche Tutorials.
jan.F. schrieb:> Welche Sprache hat eine grosse Community und ist zukunftssicher?
Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit
45 Jahren und werden es auch weiterhin tun.
Arduino ist auch nur nur eine runde Umgebung aus einfachst gehaltener
IDE, einer Menge Bibliotheken zu aller möglichen Peripherie und einer
halbwegs vereinheitlichten Hardwareplatform.
Darunter steckt als Sprache C und das ist nun mal sehr weit verbreitet,
also eine sichere Wette wenn Du "mehr" willst. Als "bessere" IDE wenn Du
von Arduino kommst kannst Du Atmel Studio nehmen und mit WinAVR dazu den
C-Compiler einbinden. Dann kannst Du damit die gleiche Hardware
programmieren und musst nicht neu kaufen, oder aber Du machst eigene
Hardware auf AVR-Basis.
Das C darunter ist das gleiche, denn Arduino benutzt am Ende den
gleichen C-Compiler. (Wenn auch vielleicht nicht die selbe
Version(-snummer))
my2ct schrieb:> Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit> 45 Jahren und werden es auch weiterhin tun.
Und C++-Programmierer sind gar keine echten Programmierer?
jan.F. schrieb:> habe jetzt länger mit der Arduino IDE gearbeitet und würde nun auf> besseres Werkzeug umsatteln.
Dann verwende Visual Studio zum Arbeiten mit den Arduinos
http://www.visualmicro.com/
>Und C++-Programmierer sind gar keine echten Programmierer?
Wahrscheinlich sind echte Hardware-Programmierer gemeint. Bei C++ ist
das ja immer so aufgebläht.
Mit der Arduino IDE kann ich teils schon gut umgehen. Ich dachte es wäre
Zeit für einen Schritt weiter.
Der Gedanke ist folgender, wenn ich eine neue Sprache lernen will, dann
soll diese dann auch eine sein die eine breite Community hat und
Zukunftssicher ist.
Aufgrund fehlenden Wissens kann ich natürlich nicht abschätzen ob jetzt
C oder C++ es sein soll. Da seid ihr schon gefragt. Ihr seid ja ein Teil
dieser Community.
Hauptsächlich will ich mich dem Arduino Bashing entziehen. Ansonsten ist
es bis jetzt ausreichend für mich.
Als Werkzeug benutze ich das Programm Programino. Dieses sieht schon
seriöser aus, und hat auch einige Tools dabei die das Programmieren
erleichtern.
Wie wärs mit Atmel Studio und nackt auf einem Atmega programmieren in C
ohne Bootloader und C++ - Bibliotheken ? So lernst du auch den Prozessor
kennen und arbeitest mit den Registern, die sehr gut in den Datenblatt
dokumentiert sind.
Ich werde mir erstmal Atmel Studio installieren und auf Youtube einige
Videos ansehen. Vorrang hat erstmal den Umgang mit dem Werkzeug zu
erlernen bevor es ans programmieren geht.
my2ct schrieb:> jan.F. schrieb:>> Welche Sprache hat eine grosse Community und ist zukunftssicher?> Hast du schon mal an C gedacht. Echte Programmierer verwenden das seit> 45 Jahren und werden es auch weiterhin tun.
Was sind denn "Echte Programmierer"? Gibt es auch unechte?
jan.F. schrieb:> Hauptsächlich will ich mich dem Arduino Bashing entziehen.
Falscher Ansatz!
Dem kann/darf/sollte man sich nicht entziehen, dem muss man sich
stellen.
(gilt zumindest für mich)
Tute das was DU für sinnvoll erachtest.
Und wenn dann C++ an der Seite raus fällt, dann ist auch gut.
Baster schrieb:> Arduino ist auch nur nur eine runde Umgebung aus einfachst gehaltener> IDE, einer Menge Bibliotheken zu aller möglichen Peripherie und einer> halbwegs vereinheitlichten Hardwareplatform.>> Darunter steckt als Sprache C ..
Eben nicht!
Im Augenblick ist C++11 der Standard.
Aber es geht auch C und Assembler.
Nicht jedem liegt die OOP, aber das macht sie weder gut, noch schlecht.
Stanislaw Jerzy Lec schrieb:
> Auch das Gute hat zwei Seiten.> Eine gute und eine böse.
jan.F. schrieb:> Ich werde mir erstmal Atmel Studio installieren und auf Youtube> einige
Das Atmel Studio basiert auf der Visual Studio IDE und ist schön, aber
aufgeblasen, erfordert einen modernen Quadcore Rechner mit mind. 8 Gbyte
RAM, wenn man einigermassen flüssig arbeiten will.
jan.F. schrieb:> Kurz und knapp gefragt. Welche Sprache hat eine grosse Community und ist> zukunftssicher? Bei der Arduino Community gab es sehr viel Hilfe und> verständliche Tutorials.
Eine Übersicht findest Du hier:
https://www.mikrocontroller.net/articles/AVR
C hat IMHO die größere Community, Assembler kommt gleich danach. (Freue
mich schon auf den Flame War hier im Forum).
Das alte AVRStudio 4.x immer sehr zu empfehlen weil klein, schnell,
schlank support für debugging mit JTAG + DebugWire, ich programmiere
damit die billigen China nano Boards. Brauchst aber auch einen passenden
Programmer. Neben den Atmel China-Billig-ISP_JTAG-Clones ist IMHO immer
noch der AVRDragon die erste Wahl: Up to Date Programmer mit (fast)
allen Modi, und debugger.
http://www.atmel.com/tools/avrdragon.aspx?tab=documents
AtmelStudio ist für ganz neue Microchip MCU's, mit Plug+Play inkl.
debugging speziell auch für die Xplained Boards wie z.B.
http://www.atmel.com/tools/mega328p-xmini.aspx optimal, aber wie gesagt
sehr aufgeblasen.
Wenn Du lieber BASIC Programmieren willst, würde ich einen Blick auf
Luna AVRhttps://avr.myluna.de/ werfen, die haben inzwischen ziemlich
viele Freunde und jede Menge libs.
Du kannst natürlich auch Forth oder Pascal nehmen, aber da dürfte die
Unterstützung nicht nur hier im Forum ziemlich gering ausfallen
Hey jan.F.
klar, alle haben Ihre eigene Meinung...
aber, wenn du erstmal weiterhin bei der ATmega Famile bleiben willst:
1. Programmiere in C
2. sollten zeitkritische Dinge dabei sein, greife in C auf "inline
assembler"
3. Atmel Studio ist für ATmega erstmal die einfachste Lösung
Ich habe auch mit C und nem Pollin AVR Board angefangen.
Wenn man nichts verstehen möchte und nur will das alles tut, sind die
LIB's usw. vom Arduino echt top. (Doch du willst wohl mehr)
Datenblatt deines µC lesen (bzgl. Peripherie), nach Source Codes suchen
und versuchen zu verstehen...so lernt man am meisten, ah und das
"rumspielen" nicht vergessen!
Glaub mir, so wild ist es nicht :)
Ich hab vorhin innerhalb von 5 min. ein fremden Code zu Testzwecken
implementiert um RGB LEDs anzusteuer. Einmal den Sinn verstanden ist
alles das gleiche. Viel Erfolg!
Um es korrekt zu halten: (hier der Verweis)
TitelBeitrag "Anzahl PWM Ausgänge zu Anzahl RGB LEDs"
Retro N. schrieb:> mind. 8 Gbyte> RAM
Wer hat das als Entwickler nicht? ...oder (Gamer)
Win braucht doch schon locker 4 :-D
Retro N. schrieb:> C hat IMHO die größere Community, Assembler kommt gleich danach. (Freue> mich schon auf den Flame War hier im Forum).
OH JA, da freu ich mich auch schon drauf, wobei beides seine
Berechtigung hat...
aber doch bitte kein C++.
Retro N. schrieb:> AtmelStudio ist für ganz neue Microchip MCU's, mit Plug+Play inkl.> debugging speziell auch für die Xplained Boards wie z.B.> http://www.atmel.com/tools/mega328p-xmini.aspx optimal, aber wie gesagt> sehr aufgeblasen.
Er muss das ASF ja nicht nutzen (falls ich dich richtig verstehe). Für
die ATmega Serie gibts da eh kaum was.
Hi,
jan.F. schrieb:> Hauptsächlich will ich mich dem Arduino Bashing entziehen. Ansonsten ist> es bis jetzt ausreichend für mich.
Sofern du nicht beruflich etwas in Richtung Embedded Devices machen
willst wäre mir soetwas wie "Arduino Bashing" egal.
Entweder es reicht für deine Ansprüche oder es reicht nicht.
Zudem geht es beim sogenannten "Arduino Bashing" ja noch nicht einmal um
die Arduino Software selbst, sondern darum das ein nicht gerade kleiner
Teil der Arduino Nutzer sich da nett aussehnde Projekte nach Copy & Past
Manier zusammenklickt, dabei nicht mal im Ansatz versteht was sie
wirklich machen, sich aber gleichzeitig für die ultimativen
Superprogrammierer halten.
Personen die sich richtig einschätzen und wissen wo sie vom Wissen
stehen sind da meist aussen vor. Sei es der erfahrene Programmierer der
aus Bequemlichkeit für ein Projekt (oder einen Test) auf Arduino
zurückgreift weil es da schon etwas in der Richtung fast fertig gibt,
sei es der Einsteiger der Arduino nutzt weil er es selbstständig (noch)
nicht kann, aber sich dessen auch bewusst ist.
jan.F. schrieb:> Der Gedanke ist folgender, wenn ich eine neue Sprache lernen will, dann> soll diese dann auch eine sein die eine breite Community hat und> Zukunftssicher ist.
Ist verständlich!
Wobei man immer unterscheiden muss zwischen dem eigentlichen Syntax der
Sprache und dem Programmierparadigma das hinter der Sprache steht.
Der Syntax, das sind die Schlüsselwörter. DAvon haben die meisten
Sprachen nur wenige. Dazu kommen dann noch die wichtigsten Bibliotheken
usw.
So einen Syntax hat man in wenigen Stunden bis Tagen komplett drinnen.
Das ist kein riesiger Aufwand.
Was viel Erfahrung und Übung braucht bis man es wirklich beherrscht das
sind die Programmierparadigmen die hinter den Sprachen stehen.
(Z.B. ob es eine objektorientierte oder prozedurale Sprache ist)
Wenn man eine Sprache samt dahinterstehendem Paradigma gut beherrscht
ist es nur ein sehr kleines Problem bis man eine weitere Sprache aus
demselben Bereich beherrscht. Selbst wenn sich der Syntax stark
unterscheidet.
Andersherum ist es für die meisten ein enormer Kraftakt wenn die Sprache
die man lernen will ein anderes Paradigma verfolgt als man bisher
gewohnt ist. Da kann die Syntax noch so ähnlich sein!
Bestes Beispiel ist der Wechsel von C nach C++ und umgekehrt.
Der Syntax von C++ baut auf dem Syntax von C auf.
Ja, der komplette Syntax von C ist in C++ enthalten.
(das entweder der größte Vorteil oder der größte Nachteil von C++. Je
nach Sichtweise)
Die sind sich auf dem ersten Blick daher sehr ähnlich!
Allerdings ist C eine prozedurale Sprache, C++ ist eine
objektorientierte Sprache (die man als Besonderheit von C++ als
prozedurale Sprache missbrauchen kann)
Wenn jetzt Jemand der bisher nur objektorientiert Programmiert hat
plötzlich mit "normalen" C arbeiten soll und dabei effektive Programme
zu Stande bringen muss, dann hat er, obwohl er den Syntax praktisch
schon seit Jahren kennt, damit viel mehr Probleme als wenn er auf Java
umsteigen muss.
Umgekehrt gilt das natürlich genauso. Ein C Programmierer der auf C++
umsteigen soll wird damit viel mehr Probleme haben als wenn er z.B. auf
Pascal wechseln will. In der Realität endet das gerade bei C++ dann
damit das zwar die C++ Befehle genutzt werden, aber im Prinzip weiter
prozedural programmiert wird.
(gilt beides natürlich nur für den jeweiligen Erstkontakt mit dem
jeweiligen Paradigma)
War bei mir damals nicht anders. Ich habe das mit dem C-Style C++ auch
erst in den Griff bekommen und die OOP verstanden als ich mich erst auf
Java konzentriert habe und erst als das ordentlich lief wieder C++ in
Angriff genommen habe.
>> Aufgrund fehlenden Wissens kann ich natürlich nicht abschätzen ob jetzt> C oder C++ es sein soll. Da seid ihr schon gefragt. Ihr seid ja ein Teil> dieser Community.
Das kommt darauf an WO du hin möchtest...
Nur Mikrocontroller oder auch PC?
Bei Mikrocontrollern: "Kleine" 8 und 16bitter "bare metal" oder aber
größere Vertreter der 32Bit Familie auf denen ein OS läuft?
Auf dem PC ist im produktiven Einsatz ausser für sehr hardwarenahe
Programmierung (treiber & Co. untere Schichten des Betriebssystems usw)
durchweg die Objektorientierte Programmierung das Mittel der Wahl.
Mittlerweile viel Java, immer häufiger C# und natürlich immer noch C++.
Auch bei den "dicken" Mikrocontrollern mit OS ist C++ sehr stark
vertreten.
(Wobei man alles grundsätzlich auch in C oder gar Basic ebenfalls
hinbekommen könnte. Nur nicht so "schön")
Aber in dem Bereich den die meisten tatsächlich mit "Embedded Systems"
verbinden, also der bereich von den kleinen 8Bittern bis zum unteren
Mittelfeld der 32Bitter, da ist C nach wie vor das Mittel der Wahl!
Es gibt für praktisch jeden aktuellen Controller aus diesem Bereich
einen praxistauglichen C Compiler. Die Beispiele/Application Notes und
Libs der Controllerhersteller sind in C geschrieben. Sicher >90% der
Projekte, egal ob kommerziell oder Freizeit, auf dieser Klasse von
Controllern wird in C realisiert.
Es gibt auch für diesen Bereich C++ Compiler, teilweise selbst für
kleine 8Bitter. Aber zum einen lange nicht für alle, zum anderen ist das
alleine aus Kapzitätsgründen gerade kein "reines C++ nach Lehrbuch"
sondern in der Realität ein Mischmasch. Je kleiner der Controller wird
um so mehr verschiebt sich das in Richtung C mit C++ Befehlen...
Und der Grad der Durchmischung und welche C++ Untermenge nun tatsächlich
nutzbar ist variert von Compiler zu Compiler. Selbst da wo es mehrere
Compiler für dasselbe Zielsystem gibt.
Das finde ich fürs erlernen absolut suboptimal!
Daher:
Für den Einsatz auf dem Mikrocontroller fange mit C an!
Nicht irgendein Mischmasch sondern mit reinem C!
Dafür kannst du deine bisherige Arduino Hardware problemlos
weiterverwenden! Das macht es vielleicht auch leichter und sicher kommt
so auch der eine oder andere AHA Effekt viel schneller.
Die allerersten Gehversuche in C (oder jeden anderen Programmiersprache)
solltest du aber nicht auf dem Controller machen sondern auf dem PC.
Einfach weil du da viel leichter verfolgen kannst was dein Programm
macht wenn es nicht das macht was es soll.
Erst nach ein paar Nachmittagen wenn du die Grundlagen sicher beherrscht
würde ich auf den Controller wechseln.
Wenn du dann in C einigermaßen sicher bist und noch weiter lernen
willst, dann ist es sicher nicht verkehrt sich mal die OOP bei der PC
Programmierung anzuschauen.
Alleine schon weil mit fortschreitender Erfahrung auch immer öfter der
Bedarf kommt seine Anwendung mit dem PC oder neuerdings dem Handy
koppeln zu wollen. Und wenn man schon mal komplett eigene Projekte macht
dann gibt es dafür kein Tool das andere für einen geschrieben haben.
Allerdings gibt es Libs und Frameworks die es auch einem mittelmäßigen
Programmierer erlauben in übersichtlicher Zeitspanne was auf die Beine
zu stellen.
Die Libs und Frameworks für den PC und vor allem für das Handy sind aber
üblicherweise in einer Objektorientierten Sprache geschrieben. (Bei
Handy abseits von Apple nahezu immer Java)
Wie geschrieben würde ich dann aber nicht mit C++ anfangen sondern
zumindest bis zu dem Zeitpunkt wo man den Hintergrund der OOP wirklich
verstanden hat zu Java oder C# greifen wo man gar nicht erst in der Lage
ist ein Paradigmenwischwasch zu schreiben.
Hat man es verstanden kann man natürlich auch wieder zu c++ greifen.
Dann spricht auch nichts dagegen auf Mikrocontrollern wo es geht und
sinnvoll ist auch mit C++ zu arbeiten. Ja, wenn man es verstanden hat
spricht nicht einmal etwas dagegen DA WO ES SINNVOLL IST bewusst mal die
Grenzen verschwimmen zu lassen und einfach so zu programmieren wie es am
zweckmäßigsten ist und es der Compiler hergibt. Und man kann sich
problemlos auf jeden Compiler und jedes Zielsystem einstellen, egal
welche Untermenge von C/C++ jetzt tatsächlich zur Verfügung steht.
Gruß
Carsten
jan.F. schrieb:> Ich dachte es wäre Zeit für einen Schritt weiter.
Man nimmt das Werkzeug, mit dem man am besten klar kommt und das Problem
lösen kann. Wenn man ein passendes Werkzeug hat, benötigt man kein
anderes. Kann man zwar machen, aber es besteht kein Zwang.
Dafür braucht man sich auch nicht zu schämen, weil jemand anders sagt,
dass er ein anderes Werkzeug benutzt. ... er mag damit besser klar
kommen. Vielleicht.
Gruß
Jobst
@Carsten Sch.
Also wenn du beim 'di-di-da-didit' genauso gut bist wie hier beim
Schreiben, dann Respekt ;-)
Ich fasse mal zusammen:
Du brauchst fast 30 Zeilen Text um zu dieser Aussage zu kommen:
Carsten S. schrieb:> Für den Einsatz auf dem Mikrocontroller fange mit C an!> Nicht irgendein Mischmasch sondern mit reinem C!
Dann kommen wieder ca. 25 Zeilen Text mit folgender Kernaussage:
Carsten S. schrieb:> Hat man es verstanden kann man natürlich auch wieder zu C++ greifen.> Dann spricht auch nichts dagegen auf Mikrocontrollern wo es geht und> sinnvoll ist auch mit C++ zu arbeiten.
Deine Einlassung zum 'Arduino Bashing' hat 15 Zeilen Text.
In vier Zeilen nun die Information die ich aus deinem
Beitrag für mich herausgefiltert habe:
* Also ein Arduino kann man durchaus mit anderen IDE Werkzeugen
benutzen.
* Man braucht sich dafür nicht zu schämen, betrachte es als EVAL-Board.
* Schreib deine Programme ausschließlich in 'C'
* Gelüstet dich nach C++ kauf dir eine 'Raspberry'.
73
PS1:
Ich frage mich, woher bei euch Funkern dieser ausschweifende
Mitteilungsdrang her kommt?
PS2: Bernd möge mir verzeihen ob diese Frage.
il Conte schrieb:> @Carsten Sch.>> Also wenn du beim 'di-di-da-didit' genauso gut bist wie hier beim> Schreiben, dann Respekt ;-)> 73>> PS1:> Ich frage mich, woher bei euch Funkern dieser ausschweifende> Mitteilungsdrang her kommt?
Von Einem auf Alle zu schließen ist jetzt ein bisschen zu allgemein.
Man kann sicher darüber diskutieren, ob ein Post dieser Länge hier im
Forum sinnvoll ist oder nicht, und am Ende den Einen oder Anderen evtl.
zu sehr strapaziert.
Ich fand die Ausführungen interessant und mich hat dieser Beitrag
schließlich mit (diesen 15 Zeilen)
>Deine Einlassung zum 'Arduino Bashing' hat 15 Zeilen Text.
nun tatsächlich motiviert, daß ich jetzt nach Jahren reiner C und asm
Programmierung auch mal mit den Arduino libs spielen werde, die mir
bisher eigentlich aus Prinzip zu unsportlich waren -
allerdings nicht mit dieser unsäglichen Arduino-IDE, sondern damit:
http://www.visualmicro.com/
P.S. QED: Es geht auch kürzer, ich bin auch Funkamateur, wenn auch
derzeit nicht QRV
73
Wenn Du Dich weiterentwickeln möchtest, dann schau Dir mal andere
Prozessoren, z.B. welche mit Netzanbindung an. Das Thema IoT greift ja
auch immer mehr um sich und ohne Netzanbindung ist das nur halb so
spannend ;-)
Ich empfehle den ESP8266 mit Programmierung in LUA. Alternativ findest
Du hier im Forum auch vermehrt Einträge über CortexM3/M4/M7, daher gehe
ich davon aus, dass diese auch eine gute Zukunft haben.
Die Programmiersprache ist meistens nicht das Problem, es sind die
Frameworks und Bibliotheken, in die man sich einarbeiten muss.
Kannst dir auch die Compiler von Mikroe ansehen.
Mit denen arbeite ich ganz gern.
Wenn man die Funktionen der Programme schön von der verwendeten Hardware
abgrenzt,kann man damit gleich mehrere Prozessorfamilien bedienen.
Unter Abgrenzung verstehe ich:
Nicht "Port.4 = 1", sondern "LED2_ON" Aufruf benutzen.
Im Sub "LED2_ON" wird dann erst die Hardwarezuweisung erledigt.
Pete K. schrieb:> Die Programmiersprache ist meistens nicht das Problem, es sind die> Frameworks und Bibliotheken, in die man sich einarbeiten muss.
Das wäre jetzt auch meinen Antwort gewesen. Gerade wenn man nicht
berufsmäßig programmiert, sind die IDE (Debugger nicht vergessen) und
gepflegten Bibliotheken (d.h. mit guter Dokumentation und passenden
Beispielen) das wichtigste.
Für die gängigen Prozessoren wird es dann die Sprachen C/C++ sein.
PS: Bin auch gerade dabei ein paar NodeMCU-Projekte umzusetzen.
Guten Morgen Community,
ich habe mir alle Ausführungen eurerseits durchgelesen, und vieles
erscheint mir schlüssig.
Zu meiner Person, es findet alles im Hobby und im Amateurumfeld statt.
Beruflich wird solches nicht gefordert sein. Von daher kann ich mich auf
wenige Prozessoren konzentrieren.
Was ich bisher benutzt habe und auch weiter benutzen werde ist der
Atmega328 und ESP8266.
Projekte waren teils Hausautomatisierung und Hardware für
Spiele(Simulationen). Wie z.B. Aquariumsteuerung, Tachometer für
Autorennspiele, diverse Spuleninstrumente ansteuern für
Raumfahrtsimulationen.
Zuletzt hatte ich bisschen mit UDP Nachrichten und Serialcomistruments
gearbeitet.
Von der vorhandenen Hardware will ich nicht weg, da sie mir preislich
sehr entgegenkommen. Baugrösse ist nicht der ultimative Faktor für mich.
Nach dem ganzen lesen gehe ich davon aus, das C für mich das richtige im
ersten Moment ist. Und falls ich Visualisierungen brauche sollte, könnte
ich mir Java anlächeln.
Zuletzt ein dickes Dankeschön an die rege Beteiligung an diesem Thema.
Ich bin mir im klaren das solch ein Thema anstrengend wirken kann und
schnell in Lagerkämpfe ausartet.
jan.F. schrieb:> Lagerkämpfe
Natürlich!
Denn über Geschmack lässt sich vortrefflich streiten.
Privat hat man freie Auswahl.
Im kommerziellen Umfeld hat man sich meist der Firmenphilosophie/Team
anzupassen. Kosten für die Entwicklungsumgebung sind da ehe zweit- oder
fünftrangig.
jan.F. schrieb:> Was ich bisher benutzt habe und auch weiter benutzen werde ist der> Atmega328 und ESP8266.
Dann ist Assembler quasi gestorben, da nicht portabel.
C/C++ ist die Wahl.
Die Arduino Umgebung kann beides.
AtmelStudio ist dann die falsche Wahl, denn es kann kein ESP und kein
Java.
Evtl. Eclipse
Denn das kann ESP, AVR, Java usw.
Eigentlich alle Prozessoren und Sprachen.
Läuft auf allen üblichen Betriebssystemen
Eine Eier-Legende-Woll-Milch-Sau.
Ich habe deine Frage so verstanden, dass du statt Arduino mit anderen
Mikrocontroller-Entwicklungsboards arbeiten willst. In dem Bereich wären
Java und C# aufgrund begrenzter Ressourcen deplaziert. Du wirst deine
Hardware nich mit virtuellen Maschinen belasten wollen, nur um eine
programmiererfreundlichere Form der OOP betreiben zu können.
C ist ohne Frage die wichtigste Programmiersprache im Bereich
Mikrocontroller. Das beherschen von Assembler ist in Ausnahmefällen auch
wichtig, aber würde ich erstmal hinten anstellen. OOP mit C++. Die Nähe
zur Hardware ist hierbei ausschlaggebend.
Beim Umstieg von Arduino auf allgemeine Mikrocontroller-Programmierung
ist das Lernen der Programmiersprache C aber nicht die große
Herausforderung. Die Kenntnis der Eigenheiten der verwendeten Hardware
ist da die größere Lernaufgabe. Hast du bei der Arbeit mit dem Arduino
schonmal in das Datenblatt des ATMega328 geschaut? Das ist ab jetzt dein
bester Freund.
chris schrieb:> aber auf dem Bild kann man sehen, wie echte Programmierer> aussahen.
Nur aus Neugierde :
Wer wahr auf dem Bild derjenige der sich das MS-DOS ausgedacht und
programmiert hat ?
(das Buberl unten links kanns wahrscheinlich nicht gewesen sein ;-)
Vielleicht sollte man auch mal Micropython in Betracht ziehen, wenn es
um Zukunftssicherheit geht:
https://micropython.org/
Boards auf denen das läuft, gibt es mittlerweile genug.
Arduino ist doch C++, man muss es nur nutzen. Man kann C++ auch
missbrauchen und den ganzen Code in ein ellenlanges loop() reinschreiben
und jegliche Strukturierungsmöglichen ignorieren. So sehen leider viele
Arduino Sketches aus. Wenn man ein Programm ordentlich aufbaut halte ich
es nicht für verwerflich den Luxus von Bibliotheken zu nutzen.
Die 'Marlin' Firmware in Millionen 3D-Druckern zeigt doch das man mit
dieser Platform durchaus brauchbares erstellen kann.
Ich würde allerdings eher auf 32-Bitter setzen, da ist viel mehr Luft
nach oben. Und das Preisargument zieht auch nicht, siehe Bluepill board
für 2 US$. Auch andere Cortex-M0 kosten weniger als 2€ und haben viel
mehr Flash, RAM und Peripherie als die steinalten ATMegas. Die schon
genannte 3D Drucker Software ist mittlerweile auch am Limit mit den
ATMegas und wird jetzt aufwändig in die 32 Bit Welt portiert.
chris schrieb:> Kein Ahnung, aber auf dem Bild kann man sehen, wie echte Programmierer> aussahen.
Bärte! Die Leute müssen wieder Bärte haben, dann wird Alles gut. Um mich
herum sehen auch alle aus, als wären sie die Auswechselspieler von
ZZ-Top.
Damit eine Vorstellung entsteht:
https://www.youtube.com/watch?v=Z_4ULKpkLNc
Herbert
Retro N. schrieb:> Microsoft? Bill Gates? Ach Du sch...>> Das waren doch die, die nur das MS-Basic selbst programmiert haben
Naja, es waren die, die fast jedem Heimcomputer der damaligen Zeit Leben
eingehaucht haben. Angefangen mit einem Computer, den es noch gar nicht
gab, sondern den Paul Allen nur emuliert hatte.
Man kann über solche Cracks (wie auch Steve Woszniak) denken, was man
will. Sie gehörten zu den genialsten und fleißigsten Programmierern
ihrer Zeit.
jan.F. schrieb:> Arduino IDE gearbeitet und würde nun auf> besseres Werkzeug umsatteln.
Die IDE unterstützt auch externe Editoren.
Sieh dir den Aufbau des "Arduino core" an.
Das Framework basiert auf avr-libc. Du kannst C++ und C mischen.
Lasse nach und nach die Arduino-Funktionen weg: z.B. das Serial Objekt
ersetzen mit etwas eigenem (für C: siehe Tutorial hier).
Viel Erfolg.
irgend eines der sehr günstigen STM32 Nucleo boards (ARM Cortex-M0 -
M4), die sind auch oft mit Arduino shields kompatibel und werden auch
oft von ST einfach verschenkt.
Für die ersten schritte die libs und IDE von mbed.
Wenn du einigermaßen den überblick hast dann eine gängige kostenloses
IDE, z.B. Attolic True Studio, STM Workbench oder gar eine eigene
toolchain mit GCC aufsetzen (ist mittlerweile relativ simple).
Sobald wie möglich immer mehr C++ Aspekte anschauen und üben. Am besten
mindestens den C++ Standard 2011.
Alternativ direkt etwas exotischeres wie die Sprache "Rust" :)
Das schöne an C++ ist:
- Du kennst es schon
- Damit kannst du auch PC und Smartphones programmieren
- Es setzt auf C auf, du wirst also alle Anleitungen bezüglich C leicht
verstehen können
- Wenn du später zusätzlich Java oder C# lernen musst, wird Dir sehr
vieles sehr bekannt vorkommen. Die ersten Kapitel der Tutorials kannst
du im Galopp hinter Dich bringen.
Stefan U. schrieb:> - Wenn du später zusätzlich Java oder C# lernen musst, wird Dir sehr> vieles sehr bekannt vorkommen. Die ersten Kapitel der Tutorials kannst> du im Galopp hinter Dich bringen.
Du meinst so ?
https://youtu.be/hLYg_hnidWI?t=494
;-)
Hallo
"Was viel Erfahrung und Übung braucht bis man es wirklich beherrscht das
sind die Programmierparadigmen die hinter den Sprachen stehen.(Z.B. ob
es eine objektorientierte oder prozedurale Sprache ist).
Wenn man eine Sprache samt dahinterstehendem Paradigma gut beherrscht
ist es nur ein sehr kleines Problem bis man eine weitere Sprache aus
demselben Bereich beherrscht. Selbst wenn sich der Syntax stark
unterscheidet."
Eine klare Aussage lieber Carsten und doch immer noch ein wenig zu kurz
gegriffen.
Könntest du genauer erklären wie man ein Programmierparadigma
beherrscht?
Wenn ich nämlich meine "Probleme" beim programmieren erlernen (C für µC
und 8Bit AVR) analysiere scheint genau das der Knackpunk zu sein.
Gibt es da etwas mehr Möglichkeiten als "nur" Erfahrung und Übung um
"echtes" Programmieren und das jeweilige Programmierparadigma zu
verinnerlichen (also nicht "nur" die reine "Grammatik" zu erlernen) so
das man es nicht nur vom "Kopf" her versteht sondern auch aus dem
"Bauch" heraus?
Meine "Probleme" liegen desweiteren nicht in den Verständnis wie C im µC
Umfeld funktioniert, und auch nicht wie ein µC (8Bit AVR) auf
Hardwareebene funktioniert und z.B. Register behandelt werden - sondern
ehr darin wie ich ein Projekt angehe (In einzelne Teilaufgaben zerlegen
ist einfacher gesagt als getan) und wie ich auf die manchmal, von
Grundsatz und ganz unabhängig von der Programmiersprache her, recht
"verworrene" Lösung komme wie ein Problem angegangen wird (als
"billiges" Beispiel z.B. ein in Software erstellter Rastschalter) - wenn
ich mir eine gute Dokumentation zu z.B. einer Software
Rastschalterfunktion anschaue kann ich diese nach mehrmaligen
konzentrierten durchlesen und "Simulieren" im Kopf und auf Papier(!)
nachvollziehen - aber selbst auf solch eine Lösung zu kommen... (sehr)
schwierig - bis unmöglich.
Wie erlerne ich so etwas - gibt es mehr Empfehlungen außer Training und
Übung?
Wie sähe den ein gutes Training aus?
Irgendwie ist mir der immer wieder allgemeine gegebene Tipp:
"Ausprobieren, Fehler machen und aus den Fehlern lernen" zu wenig und zu
Oberflächlich - das "muss" ,-) doch auch gezielter und einfacher gehen?!
noch ein Ham
> Wie sähe den ein gutes Training aus?
Es gibt jede Menge Bücher mit dem Wort "Patterns" oder "Entwurfsmuster"
im Namen, da werden Lösungen für häufige Programmier-Probleme
aufgezeigt.
Darüber hinaus kommst du aber nicht ums "Learning by Doing" herum.
Wenn Du eine Lösung gefunden hast, die Dir elegant vorkommt, dann
diskutiere sie mit anderen Entwicklern. Dieser Austausch untereinander
ist am Ende der wichtigste Aspekt, besser zu werden.
Hier im Forum täglich mit zu lesen ist auch hilfreich. Da werden
Probleme diskutiert, die du nicht einmal erahnt hast. Und es werden
Lösungen gezeigt, von denen du etwas lernen kannst.
> In einzelne Teilaufgaben zerlegen ist einfacher gesagt als getan
Und doch ist es die Hauptaufgabe eines jeden Softwarenetwicklers. Eine
gewisse Portion Talent gehört sicher auch dazu.
Um eine Wald zu roden, muss man viele Bäume umhauen. In diesem Fall
besteht das "zerlegen" also, sich auf den einzelnen Baum zu
konzentrieren und zu überlegen, wie man den am schnellsten weg haut.
Ein unfähiger Entwickler würde sagen "Das kann ich alleine mit meiner
Axt nicht schaffen. Der Wald ist viel zu groß." Während der fähige
Entwickler längst unterwegs ist, Hilfe oder ein besseres Werkzeug zu
beschaffen. Und der dumme aber fleißige hat wenigstens angefangen zu
Hacken, obwohl ein Ende nicht in Sicht ist.
Noch ein Ham schrieb:> wenn> ich mir eine gute Dokumentation zu z.B. einer Software> Rastschalterfunktion anschaue kann ich diese nach mehrmaligen> konzentrierten durchlesen und "Simulieren" im Kopf und auf Papier(!)> nachvollziehen - aber selbst auf solch eine Lösung zu kommen... (sehr)> schwierig - bis unmöglich.> Wie erlerne ich so etwas - gibt es mehr Empfehlungen außer Training und> Übung?
Das geht am besten wenn man sich dem PROBLEM annähert!
Vorne weg mal folgendes:
Ich bin ich der Meinung dass es zwei Typen von Menschen gibt
was das Lernen anbetrifft.
Die eine Hälfte lernt alles auswendig, die verinnerlichen praktisch
die Bedienungsanleitung. Die Kurzform ist die Checkliste:
wenn LED A rot blinkt dann Taster grün drücken usw.
Die 2. Hälfte spielt sich rum und prägt sich die Wege ein die zum Erfolg
führen. Das sind die:
'Lerning by doing' oder wie du es ausdrückst
'Ausprobieren, Fehler machen und aus den Fehlern lernen'
Diese beiden Typen sind dir bestimmt schon begegnet:
Man fragt die ganz simpel: Erklär mal wie das funktioniert.
Die Ersteren erklären dir alles wie aus der Pistole geschossen,
die brauchen dazu nicht mal ein Anschauungsobjekt.
Die Zweite Hälfte schaut dich verdutzt an und erklärt dir, dass sie es
nicht können und erzählt dir weiter dass man da nur einmal oder zweimal
auf was drückt und dann geht es.
Wenn sich aber nun am Gerät was ändert, wenn die LED nicht mehr rot
sondern gelb blinkt und dann noch der Taster irgendwo anders platziert
ist
dann haben die 'Auswendigkönner' richtig Stress.
Die 'Ausprobier' Fraktion fangen sofort wieder damit an rum zuspielen
bis
sie den neuen Weg gefunden haben.
Um den Kreis zu schließen, um dir zu erklären wie man zu einer eigenen
Lösung kommt ist es von Vorteil wenn man der 2. Fraktion angehört ;-)
Bezogen auf deine RastSchalterfunktion könnte das folgender maßen
aussehen:
Als erstes würde ich an einen freien Port-Pin einen Taster anschließen
und eine Entprell-Funktion implementieren.
Das Ergebnis davon auf einen weiteren PIN ausgeben,
sodass man das am Oszi (oder LA) gut darstellen kann.
Dann würde ich das 1. mal 'rumspielen' bis es dann gut funktioniert.
Als nächste käme dann eine Flankenerkennung (gedrückt / nicht gedrückt)
dazu die genau so getestet wird.
Weiter als nächstes käme dann ein flankengetriggertes Flipflop
(softwaremäßig) dran, dessen Ausgang wiederum auf den PIN gegeben wird
um das Resultat zu überprüfen.
Damit das Auge auch was davon hat, kannst du eine LED dranhängen
und dann voller Stolz deinem Partner vorführen ;-)
Wie du vieleicht erahnen kannst - man lernt sozusagen spielerisch.
Wenn es hinhaut kann das sehr motivierend sein.
Und sollte das gleiche Problem ein 1/4 Jahr später erneut auf dich
zukommen
machst du sowas dann mit links.
Achim S. schrieb:> Retro N. schrieb:>> Microsoft? Bill Gates? Ach Du sch...>>>> Das waren doch die, die nur das MS-Basic selbst programmiert haben>> Naja, es waren die, die fast jedem Heimcomputer der damaligen Zeit Leben> eingehaucht haben. Angefangen mit einem Computer, den es noch gar nicht> gab, sondern den Paul Allen nur emuliert hatte.>> Man kann über solche Cracks (wie auch Steve Woszniak) denken, was man> will. Sie gehörten zu den genialsten und fleißigsten Programmierern> ihrer Zeit.
Das waren keine Cracks, sondern nur 2 clevere junge Kerle, die es
verstanden haben mit wenig Aufwand den größtmöglichen Nutzen zu
erzielen.
https://en.wikipedia.org/wiki/Altair_BASIC
Woz ist da schon ein ganz anderes Kaliber, als die damaligen 3
Mitglieder des MS-Gesangsvereins. Neben genial puristischen Hardware
Designs wo jedes Gatter einzeln optimiert war (AppleII Mainboard Refresh
Logic+Grafik, DiskII Controller), hatte Steve Wozniak schon für den
Apple I mal auf die Schnelle, ohne einen Assembler zu benutzen ein
Integer Basic mit OP-Codes auf Papier geschrieben und als Hexdump
implementiert.
https://de.wikipedia.org/wiki/Apple_Integer_Basic
Unbedingt sehenswert:
https://www.amazon.de/Silicon-Valley-Story-Noah-Wyle/dp/B006WVESHW
Carsten S. schrieb:> Zudem geht es beim sogenannten "Arduino Bashing" ja noch nicht einmal um> die Arduino Software selbst, sondern darum das ein nicht gerade kleiner> Teil der Arduino Nutzer sich da nett aussehnde Projekte nach Copy & Past> Manier zusammenklickt, dabei nicht mal im Ansatz versteht was sie> wirklich machen, sich aber gleichzeitig für die ultimativen> Superprogrammierer halten.
Leider wird Dir der geistige Horizont fehlen, um zu erfassen dass Du
gerade mit herunter gelassen Hosen da stehst...
Du bist einer der Zweitklässler die zu fünft einen Erstklässler
auslachen. Messe Dich stattdessen doch mal mit Dritt- und Viertklässler!
Selten so ein Eigentor gesehen wie Du es hier fabriziert hast...
il Conte schrieb:> Die eine Hälfte lernt alles auswendig, die verinnerlichen praktisch> die Bedienungsanleitung. Die Kurzform ist die Checkliste:> wenn LED A rot blinkt dann Taster grün drücken usw.>> Die 2. Hälfte spielt sich rum und prägt sich die Wege ein die zum Erfolg> führen.
Das ist aber eine extrem einseitige Sichtweise ;-)
Es gibt da die Anderen, die den Anspruch haben, ihre Programmiersprache
systemunabhängig beherrschen wollen, ihre IDE verstehen wollen, sich
über entsprechende Frameworks informieren und gelernt haben, eine
Anforderung analytisch anzugehen.
Die vor dem Hands-On ein strukturiertes Lösungskonzept entwickeln um das
ganze dann Schritt für Schritt (top-Down oder bottom-up) in Code zu
verwirklichen.
Man muss dazu kein Profi sein, aber eine solide Ausbildung hilft da
ungemein.
Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.
C++ ist Objektorientiert. Also wenn ich später mal mit Java oder C# was
machen sollte bin ich vorerst auf der Gewinnerstrasse.
Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu
lernen.
Retro N. schrieb:> Das waren keine Cracks, sondern nur 2 clevere junge Kerle, die es> verstanden haben mit wenig Aufwand den größtmöglichen Nutzen zu> erzielen.> https://en.wikipedia.org/wiki/Altair_BASIC
Naja, lange ist's her und natürlich steht Woz mir (wie wohl jedem
Entwickler) näher. Den beiden sollte man aber zugute halten, dass sie
das Basic entwickelten, ohne den Prozessor je gesehen zu haben. Und dass
sie die Maßstäbe gesetzt haben, trotz ihrer Jugend (ein paar Jahre
jünger also Woz).
jan.F. schrieb:> Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu> lernen.
Das ist meiner bescheidenen Meinung nach ein Trugschluss den viele
machen (und dem ich selber auch mal aufgesessen bin). Nur weil höhere
Mathematik, z.B. das Lösen von Differentialgleichungen auch
Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit
Differentialgleichungen an, sondern eben mit dem kleinen 1x1.
Da C++ per Definition nahezu den gesamten C-Standard einschließt, kannst
du niemals ein guter C++-Programmierer werden, wenn du den C-Teil nicht
verstehst.
jan.F. schrieb:> jan.F. (Gast)
Netter Versuch, wieder mal die alten Streitigkeiten hochkommen zu lassen
- Du bist aber einen Tag zu früh, morgen ist Freitag :-)
0 Troll-Punkte :-)
Um mal wieder Minus-Punkte zu sammeln:
Spanisch, Englisch und Französich habe die größte "Community" (ich hoffe
in der richtigen Reihenfolge) :-)
Du willst von dem Arduino Werkzeug weg, weil die Anderen dich auslachen?
Meiner Meinung nach, muss ein Werkzeug seinen Zweck erfüllen.
Also für mich der beste (wie auch immer man das definiert) Weg zur
Lösung eines Problems sein.
Ob ich mit einem Besen von Aldi oder von Manufaktum den Hof fege,
ist dem Kunen doch egal.
Der will nen sauberen Hof!
Und wenn auf der Rechnung ein 15% Zuschlag für einen handgeklöppelten
Besen auftaucht,
darfst du ab sofort andere Höfe fegen.
Disclaimer:
Ich finde gute Werkzeuge sehr wichtig und bin gerne bereit für Qualität
zu zahlen.
Auch ist die Eigenart, dass jeder Konzern (aka Kapitalsammelbecken)
alles verkaufen muss, was er verkaufen kann verteufele ich zutiefst.
Das o.g. Beispiel ist damit nicht mit meiner Moral deckungsgleich.
Dirk schrieb:> Ich finde gute Werkzeuge sehr wichtig und bin gerne bereit für Qualität> zu zahlen.> Auch ist die Eigenart, dass jeder Konzern (aka Kapitalsammelbecken)> alles verkaufen muss, was er verkaufen kann verteufele ich zutiefst.> Das o.g. Beispiel ist damit nicht mit meiner Moral deckungsgleich.
Ähm ... GCC ist nicht kommerziell ... hust :-) und kann auch C++ ...
(soweit mir bekannt)
Aber ich kann auch die eingefleischten Arduino-Jünger verstehen - jeder
nach seiner Fasson.
jan.F. schrieb:> Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.
Schön das wir nach dem ganzen OT wieder beim eigentlichen Thread-Thema
sind... ,-)
> Jetzt bin ich ein bisschen verwirrt. C nur für Mikroprozessoren.
Ich vermute mal, Du hast die bisherigen Antworten nicht verstanden,
oder?
Nr.1: Alles was Du an Sprachen genannt hast, führt am Ende irgendein µP
aus, auch Java und Python und php.
> C++ ist Objektorientiert. Also wenn ich später mal mit Java oder C# was> machen sollte bin ich vorerst auf der Gewinnerstrasse.
Nr.2: Jede Sprache hat ihre Daseinsberechtigung, aber eben in ihrem
eigenen Umfeld und Anwendungsfall.
C ist schnell, effizient und hardwarenah und ist für ziemlich jede
Plattform verfügbar, bildet die Basis zum Verständnis von C++, was aber
etwas dann doch etwas ganz anderes ist.
Java ist interpretiert, läuft akzeptabel auf vielen Betriebssystemen mit
modernen CPUs, und benötigt immer die installierte JRE von Oracle.
> Und die Syntax von C ist in C++ drin. Dann ist das Logische also C++ zu> lernen.
Ja das glaubst auch nur Du. Beide Sprachen haben völlig unterschiedliche
Paradigmen und damit unterschiedliche Denkweisen, Probleme zu lösen.
Für das Grundverständnis musst Du bei beiden Sprachen den Umgang mit
Pointern lernen, sonst programmierst Du Basic in der Syntax von C.
Grundsätzlich gilt: Schlechter Code läßt sich in jeder Sprache schreiben
und konterkariert die Vorteile der jeweiligen Sprache.
Tip: Lern erst mal C, auch durchaus zunächst auf dem PC, wenn das Ziel
ist, einen Microcontroller zu verstehen und hardwarenah zu
programmieren, danach auch gerne C++ wenn Du für ein Betriebssystem
programmieren möchtest. (oder C#, wenn es Dir lieber ist: in dem Fall
auch mal nach "Mono" googlen)
Siehe auch hier: https://www.mikrocontroller.net/articles/C_vs_C%2B%2B
Besorg Dir gute Literatur, für C muss man nicht unbedingt den
Kernighan-Ritchie nehmen, auch wenn der als Standard-Werk gilt.
Das wurde u.a. auch hier schon mal diskutiert:
Beitrag "C lernen / suche passendes Buch"
Für C++ ist dieses Buch empfehlenswert
https://www.amazon.de/Programmierer-lernen-professionell-anwenden-L%C3%B6sungen/dp/3446443460/ref=sr_1_1?ie=UTF8&qid=1506029570&sr=8-1&keywords=c%2B%2B
P.S. Das Arduino Framework ist in C/C++ geschrieben, verführt aber den
Anwender dazu, nicht selbst denken zu müssen und nur Codeschnipsel aus
dem Internet zu kopieren. Der besteht dann oft nur aus dem Aufruf der
Library-Funktionen und wird als "Basic in C Syntax" verfasst.
Das liegt aber am Programmierer, nicht an der IDE. Als Compiler
verwendet sogar die ArduinoIDE den avr-g++
Keiner hindert Dich daher also schon die ganze Zeit daran, sauberen
C/C++ Code zu schreiben, oder anstelle der Libraries Deine eigenen
Functions oder Objects zu coden, falls Du unbedingt an der ArduinoIDE
festhalten willst.
> Nur weil höhere Mathematik, z.B. das Lösen von Differentialgleichungen> auch Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit> Differentialgleichungen an, sondern eben mit dem kleinen 1x1.
Der Vergleich hinkt, denn der TO kennt C++ bereits (wegen Arduino).
Zumindest die Grundlagen davon.
> Java ist interpretiert
Seit Version 1.5 nicht mehr. Der sogenannte JIT Compiler übersetzt den
virtuellen Maschinencode zur Laufzeit in echten Maschinencode.
> (Java) benötigt immer die installierte JRE von Oracle.
Nein, es gibt auch eine JRE aus der Community namens OpenJava, sowei
eine von IBM und ich meine, Microsoft hat auch eine im Programm. Für
Lego Mindstorms gibt es eine abgespeckte JRE aus einer anderen
Community.
> Das Arduino Framework ist in C/C++ geschrieben, verführt aber den> Anwender dazu, nicht selbst denken zu müssen und nur Codeschnipsel aus> dem Internet zu kopieren.
Das hast du gut auf den Punkt gebracht.
Stefan U. schrieb:>> Nur weil höhere Mathematik, z.B. das Lösen von Differentialgleichungen>> auch Multiplikationen einschließt, fängt man nicht in der 2. Klasse mit>> Differentialgleichungen an, sondern eben mit dem kleinen 1x1.>> Der Vergleich hinkt, denn der TO kennt C++ bereits (wegen Arduino).> Zumindest die Grundlagen davon.
Der TO scheint "Arduino" für eine eigene Sprache zu halten. Seine
C++-Kenntnisse schätze ich dementsprechend eher dürftig ein. Vermutlich
ist er fähig Objekte zu instanziieren und eine Member-Funktion
aufzurufen. Bei Leuten die aus der Arduino-Ecke kommen muss man sich
manchmal schon fragen ob sie jemals eine eigene Funktion programmiert
haben, geschweige denn eine ganze Klasse. Da fehlen meistens elementare
Grundlagen, z.B. der sichere Umgang mit Zeigern oder das Verständnis
welche Variable eigentlich wo im Speicher landet. Natürlich kann man
sich das auch alles mit C++ erarbeiten und solange man im Arduino-Stil
lediglich ein bisschen syntaktischen Zucker nutzt macht es die Sache
auch nicht unbedingt viel komplizierter aber wer nicht einmal den
Unterschied zwischen Stack und Heap kennt wird durch typische (für
PC-Programmierung gedachte) C++-Lektüre zu allerlei Dummheiten
verleitet. Von daher würde ich einem Anfänger eher zu C als zu C++
raten, einfach weil es überschaubarer ist.
Stefan U. schrieb:>> Java ist interpretiert> Seit Version 1.5 nicht mehr. Der sogenannte JIT Compiler übersetzt den> virtuellen Maschinencode zur Laufzeit in echten Maschinencode.>>> (Java) benötigt immer die installierte JRE von Oracle.> Nein, es gibt auch eine JRE aus der Community namens OpenJava,
Echt jetzt?
Sorry war mir nicht bekannt, habe mich ehrlich gesagt in letzter Zeit
nicht tiefer mit JAVA beschäftigt und demzufolge auch nicht aktuell
gehalten.
Das sind Gründe, sich die Sache mal näher anzuschauen.
Gibt es für JAVA eine Standard IDE, oder nimmt man einen der üblichen
Verdächtigen (Eclipse etc.)?
Stefan U. schrieb:> neben Eclipse sind zum beispiel auch NetBeans und IntelliJ> bekannt.
Danke für den Hinweis, werde ich mir mal anschauen.
>> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen> wollen.
Zumindest nicht auf 8 bit MCUs, bei SBCs mit ARM SoCs schon eher.
Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:
1. Arduino ist nicht AVR
Arduino Frameworks gibt es für viele Prozessoren. Angefangen vom ESP8266
u.ä. bis zu allen möglichen ARM-Derivaten. Das Arduino Prinzip setzt auf
Vereinfachung, wo Komplexität durch Nachlässigkeit der Entwickler
unnötig ist. Das Framework stellt eine HAl dar und ist damit in Linie
mit moderner Softwareentwicklung für Embedded Systeme.
2. Arduino Software wird nicht nur mit der Arduino-IDE entwickelt.
Viele IDEs werden unterstützt. Angefangen von Atmel Studio, Eclipse und
viele andere.
3. Auch Profis verwenden Arduinos, wenn es zu den Anforderungen passt.
Besonders für Testaufbauten lohnt sich oft die Eigenentwicklung eines
speziellen Prozessor Boards nicht. Die Arbeitszeit eines Profis ist zu
teuer, um sie zu verschwenden.
4. Echte Arduinospzezialisten kennen den Code des Frameworks und passen
dieses entsprechend an, wenn es die Umstände erfordern.
5. Ist für eine Problem keine Library verfügbar, weiß der Profi, wie man
selbst eine schreibt und einbindet.
Frohes Wochenende an alle Ardunauten ;-)
Stefan U. schrieb:> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen> wollen.
Warum nicht? Laeuft doch auch auf deiner Sim-Karte und diversen
Smartcards.
Marcus schrieb:> Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:
Deine Anmerkungen sind ganz schön keck ! :-(
Mich würde es nicht wundern
wenn sie dich hier durch den Fleischwolf treiben :-(
Wenn ich dein Satement Nr.3 anschaue
und mir dabei ein 10 fach gestacktes Arduino vorstelle,
dann kommt mir das kalte Grausen.
Retro N. schrieb:> Stefan U. schrieb:>> neben Eclipse sind zum beispiel auch NetBeans und IntelliJ>> bekannt.>> Danke für den Hinweis, werde ich mir mal anschauen.>>>>> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen>> wollen.> Zumindest nicht auf 8 bit MCUs, bei SBCs mit ARM SoCs schon eher.
Wobei ein ARM SoC kein MCU mehr ist...
Kaj G. schrieb:> Stefan U. schrieb:>> Auf Mikrocontrollern würde Java allerdings nicht ersthaft einsetzen>> wollen.> Warum nicht? Laeuft doch auch auf deiner Sim-Karte und diversen> Smartcards.
Wo läuft denn darauf Java? Google spuckte darüber auch nichts aus...
Es gibt einen ganz einfachen Grund weshalb Java nicht für MCU-Systeme
geeignet ist, Java ist für eine Benutzung mit einer JVM zugeschnitten.
Java, also die Sprache selbst, besitzt viele Eigenschaften die man auf
diesen Systemen nicht zu gebrauchen sind. Z.B. dass alle außer den
Standardtypen wie int Referenztypen sind, ergo einen Heap benötigen. Es
gibt keine unsigned Typen. Objekte tragen viele Typinformationen mit ->
Overhead. Keinen direkten Zugriff auf Speicher über Adressen. Die Liste
lässt sich beliebig weiterführen. Es gibt zwar in der Tat Java Kompiler
z.B. für AVR, das ganze ist aber rein akademischer Natur und ehrlich
gesagt nicht zu gebrauchen, da Spezialkonstrukte benötigt werden und die
Sprache letztenendlich nicht mehr Standardkonform ist.
jan.F. schrieb:> Nach dem ganzen lesen gehe ich davon aus, das C für mich das richtige im> ersten Moment ist. Und falls ich Visualisierungen brauche sollte, könnte> ich mir Java anlächeln.
C ist fein, die Basics von C++ mitzunehmen ist auch keine schlechte
Idee. Für Visualisierungen ist Java recht aufwändig, da bieten sich eher
Skriptsprachen wie Python oder ein kleines Webfrontend mit EcmaScript
und so etwas wie flot, jqPlot oder jqWidgets [1,2,3] an.
[1] http://www.flotcharts.org/
[2] http://www.jqplot.com/
[3] https://www.jqwidgets.com/
il Conte schrieb:> Marcus schrieb:>> Hier noch ein paar Arduino-Wahrheiten zum Wochenendausklang:>> Deine Anmerkungen sind ganz schön keck ! :-(
Nein, nur zutreffend.
Arduino F. schrieb:> Die Arduino Umgebung kann beides.>> AtmelStudio ist dann die falsche Wahl, denn es kann kein ESP und kein> Java.>> Evtl. Eclipse
Eigentlich reichen eine ordentliche Shell, ein Build-System wie make und
ein vernünftiger Editor wie Kate, UlraEdit, Notepad++, Geany, Sublime,
Atom, vi oder Emacs, wobei die letzten beiden extrem leistungsfähig
sind, aber nicht unbedingt für Anfänger und Gelegenheitsprogrammierer
geeignet.
> Eine Eier-Legende-Woll-Milch-Sau.
Das ganze hochintegrierte IDE-Gerümpel eint das Problem, daß es, nunja,
eben hochintegriert ist. Tausend kleine Fensterchen, in keinem kann man
wirklich was sehen, tausend kleine Knöpfchen, die im Hintergrund dann
doch nur wieder die guten alten Kommandozeilenwerkzeuge aufrufen, und
wenn man mal ein paar Wochen nicht mit der IDE gearbeitet oder ein
Update gemacht hat, darf man sich erstmal wieder einarbeiten...
Und dann lassen die IDEs nur das komfortabel zu, was ihre Hersteller
sich ausgedacht haben und vorstellen können. In einem Nachbarthread will
gerade jemand cmake nicht benutzen, obwohl es zwar sein Problem lösen
würde, aber nicht mit seiner IDE kompatibel ist. Bestimmt gibt es
irgendeinen Weg, das hinzubekommen, aber dazu muß man wieder genau die
Arbeit investieren, die man durch die IDE eigentlich sparen wollte und
sollte.
Deswegen kenne ich außer mir selbst noch eine ganze Reihe anderer
Profis, die aus guten Gründen ganz bewußt auf IDEs verzichten. (Und
bitte, liebe IDE-Freunde: erspart mir die übliche "aber meine IDE kann
XY"-Debatte, die hab ich schon hundertmal geführt und alles, was Ihr mir
da anpreist, kann ein vernünftiger Programmiereditor auch. Danke.)
In anderen Kontexten wird den Leuten auch immer wieder geraten,
unbedingt mit Assembler oder wenigstens in C zu programmieren, damit man
seinen uC möglichst gut kennenlernt. Nun, Mikrocontroller werden
gemeinhin nach der zu lösenden Aufgabe ausgesucht und sind daher
volatil, aber die Werkzeuge, mit denen man seinen Code schreibt,
meistens nicht. Wäre es da nicht eine gute Idee, erstmal Basics wie den
Kompiler, den Debugger und dann Build-Systeme wie Make und cmake aud der
Kommandozeile kennenzulernen, damit man weiß und versteht, was die IDE
im Hintergrund macht?
Java wurde ursprünglich für den Einsatz in eingebettete Umgebungen
2
konzipiert. In den 90er Jahren waren dies Internet-Browser, Settop
3
Boxen und Mobiltelefone der zweiten Generation. Seit Ende der 90er
4
Jahre setzte sich Java jedoch vorwiegend für den Einsatz im
5
Serverbetrieb durch. Für eingebettete Lösungen war eine optimierten
6
Form der Java Virtual Machine, die Java Micro Edition (J2ME), vorgesehen.
So, mehr suche ich dazu jetzt nicht raus ;)
Ich bin so dreisst zu behaupten, dass so ziemlich jeder halbwegs
aktuelle Mikrocontroller mehr Rechenleistung und Speicher haben duerfte,
als ein Handy aus den 90ern.
@Kaj G.
Interessant, da hast du dann natürlich recht. So wie es scheint, wird
Java dort aber eben deshalb eingesetzt, weil die Sprachbeschränkungen
diesmal nutzlich sind (Sicherheitsbereich, keine Echtzeit), damit man
nicht viel kaputt machen kann.
Kaj G. schrieb:> Cyberpunk schrieb:>> Es gibt einen ganz einfachen Grund weshalb Java nicht für MCU-Systeme>> geeignet ist> Falsch. Ganz genau dafuer wurde Java urspruenglich mal entworfen und> auch eingesetzt.
Nein, denn Embedded =/= MCU-Systeme.
1
In den 90er Jahren waren dies Internet-Browser, Settop
Aktuelle eingebettete Lösungen auf Java Basis basieren auf der Java Standard Edition und kommen vorwiegend in Geäteklassen mit 32bit CPUs , 500+MHz und 128+MB Speicher zum Einsatz. Eine entsprechendes Gerät hätte in den 90er Jahre als Industrie PC gegolten.
MCU-Systeme müssen meistens Echtzeitfähig sein, da hilft es nicht eine
abgespeckte JVM zu nehmen und ein RTOS dranzuklatschen.
Gegenüber CNet hat Sun im Oktober 2007 angekündigt, die Plattform Java ME zugunsten Java Standard Edition aufzugeben. Grund hierfür ist, dass die Geräte, für die Java ME einst geschaffen wurde, immer leistungsfähiger wurden. Die Umstellung soll aber nicht auf einen Schlag passieren, sondern wird sich über die nächsten Jahre vollziehen.
Wie gesagt Java war nie für MCU-Systeme gedacht...
Sheeva P. schrieb:> Das ganze hochintegrierte IDE-Gerümpel eint das Problem, daß es, nunja,> eben hochintegriert ist.> [...]> Nun, Mikrocontroller werden> gemeinhin nach der zu lösenden Aufgabe ausgesucht und sind daher> volatil, aber die Werkzeuge, mit denen man seinen Code schreibt,> meistens nicht. Wäre es da nicht eine gute Idee, erstmal Basics wie den> Kompiler, den Debugger und dann Build-Systeme wie Make und cmake aud der> Kommandozeile kennenzulernen, damit man weiß und versteht, was die IDE> im Hintergrund macht?
Das ist meiner Meinung nach absolut sinnvoll. Es würde unter anderem
auch dem, von Arduino ausgehenden, Missverständnis irgendwelche Header
seien "Libraries" entgegenwirken. Immer öfter lese ich hier im Forum
auch am Ende eines Beitrags in dem eine Frage gestellt wird
"Programmiert wird mit Embitz." oder "Programmiert wird mit SW4STM32.",
obwohl das Problem nicht im geringsten mit dem Compiler, geschweige denn
mit der IDE zusammenhängt. "Programmiert wird mit Cherry-Tastatur" oder
"Ich programmiere mit einem Samsung-Monitor" hätten wohl eine ähnliche
Aussagekraft und ich frage mich dann ob diese Leute überhaupt die
leiseste Ahnung haben, was ihre IDE im Hintergrund eigentlich macht.
Ich bin erstaunt daß Sheeva Plug für seinen kritischen Beitrag zu
IDE's so viele -1 bekommen hat.
Seine Ausführungen kann ich aus eigener Erfahrung durchaus
nachvollziehen. Statt einer schlechten bewertung möchte ich darüber
hinaus nun die für mich wichtigsten Vorteile von IDE nennen:
- Automatische Eingabeergänzung, hilft sehr, wenn man sich nicht mehr
exakt an die Namen von Klassen und Methonden (z.B. subStr) erinnert. Da
ich mit vielen wechselnden Programmiersprachen arbeite, passiert mir das
sehr häufig.
- Hyperlinks auf die Interface, Implementierungen und Dokumentationen.
Oder anders gesagt: Blitzschnelle Navigation, hilft vor allem in großen
Projekten.
- Refactoring. Ich habe mich darangewöhnt, schlechte Funktionsnamen und
Variablen namen blitzschnell einfach zu ändern, ohne die ganzen Stellen
suchen zu m üssen, wo sie verwendet werden.
- Debugging. Arduino Nutzer kennen das nicht, aber von vielen anderen
Programmiersprachen bin ich es gewohnt, daß man notfalls mal einen
Unterbrechungspunkt setzen kann und dann Schritt für Schritt direkt im
Quelltext mitlesen kann, welche Entscheidungen das Programm getroffen
hat und welche Zwischen-Ergebnisse bei Berechnungen und
Strin-Manipulationen entstanden sind. Ich weiß, daß Debugging zumindest
bei C/C++ auch irgendwie auf der Kommandozeile geht, aber mit der
Bedienung dieser Variante des Debugger tue ich mich sehr schwer.
Ich möchte noch einen Aspekt gegen eine bestimmte Nutzungsart von IDE's
ergänzen. Und zwar mag ich es inzwischen nicht mehr, wenn die IDE das
Projekt ohne Build Script baut.
Gelegentlich nehme ich kleine Entwicklungsaufträge für Geld an. Meistens
schreiben mir die Auftrraggeber vor, welche IDE ich zu verwenden habe,
wie sie das Projekt später selbst weiter bearbeiten wollen. meistens ist
das dann eine ziemlich ale Version der IDE. In einem Fall musste ich
dazu eine alte Windows Lizenz kaufen und in einer VM laufen lassen. In
anderen Fällen musste ich meine aktuelle Entwicklungsumgebung
deinstallieren, um die ältere installieren zu können. Das ist super
ätzend.
Und trotz der Anpassunf meinerseits sind diese Leute dann später dennoch
oft nicht imstande, das Projekt weiter zu bearbeiten, weil sie ihre IDE
falsch konfiguriert haben. Teilweise scheitert sowas auch ganz simpel an
absoluten Dateipfaden im Projekt, die man leider nicht zu 100%
verhindern kann.
Für meine eigenen Projekte habe ich daher die Entscheidung getroffen,
immer mit einem Build Script zu arbeiten. Bei C wäre das dann zum
Beispiel das gute alte make, und bei Java ant. Solche Projekte kann man
problemlos auf der Kommandozeile bauen, und zwar sowohl unter Linux als
auch unter Mac OS und Windows. Es gibt in der Regel nur eine
Abhängigkeit: Die Toolchain, welche man am Stück herunterladen und
installieren kann.
Manchmal (eher selten), wenn ich dynamische Code-Generierung oder
komplexe Sonderlocken im Build Script brauche, setze ich auf Perl
Scripte. Damit diese unter Windows laufen, lege ich eine alte Version
des Perl Interpreters mit ins Projektverzeichnis (nur eine *.exe und
eine DLL). Die anderen beiden Betriebssysteme enthalten Perl bereits
normalerweise, so daß hierzu nichts extra installiert werden muss.
Diese alten Kamellen sind zwar weniger komfortabel und Zeitaufwändiger
für den Entwickler, aber sie sind Deppensicher anzuwenden. Und das
scheint mir der wichtigere Aspekt zu sein, wenn man das Projekt
veröffentlicht, and andere übergibt oder einfach nur langfristig wartbar
halten will.
Tools wie Maven in Java sind für mich ein absolutes NoGo, lerider muss
ich damit täglich arbeiten. Maven verspricht, alles automazisch zu
machen. In Wahrheit muss man dafür aber (zumindest in komplexen
Projekten) so viel konfigurieren, daß alleine die
projekt-Konfigurationsdatei (pom.xml) schon 20x größer ist, als ein
gleichwertiges ant Script oder Shell Script. Außerdem tun die
Automatismen oft nicht das, was ich brauche. Zum beispiel fehlen mir
häufig Libraries für indirekte Abhängigkeiten, während andere unnütig
dazu geladen werden. Klar kann man etwas dagegen unternehmen, aber das
macht dann in der Praxis am Ende mehr Arbeit, als alle Libraries einfach
komplett manuell zusammen zu sammeln.
Außerdem hängt der Build Vorgang bei solchen Tools von Internet
Dienstleistern ab. Da kann es schnell passieren, daß der Build bei mir
super klappt, aber beim Kunden plötzlich nicht mehr. Denn er hat keine
Verbindung zu irgendeinem Repository, oder dort liegen jetzt andere
Versionen der Libraries herum. Ein GAU Szenario ist für mich (und das
habe ich tatsächlich erleben müssen), wenn ich ein ehemals abgegebenes
Projekt nach 6 Jahren wieder bekomme und ändern soll. Dann scheitert der
Build, weil einige Libraries gar nicht mehr downloadbar sind oder weil
die Abhängigkeiten falsch vorgegeben sind. Wir brauchten einmal zu zweit
eine ganze Woche, um ein alten Maven Projekt compilierbar zu machen. Ich
bin absolut sicher, daß mir mit ant oder Shell Script viel schneller
gewesen wären.
Zu viel Auto-Magic ist nicht gut. Aber gerade dazu neigen die IDE's
zunehmend.
Mein Tip: Nutze die IDE als besseren Texteditor und GUI für den
Debugger. Aber der Build Vorgang sollte auf der Kommandozeile ganz
unabhängig von der Installtion der IDE laufen.
Selbst SAP macht das so bei einigen sehr prominenten Produkten. Ich
halte das für eine Weise Entscheidung.
Christopher J. schrieb:> Es würde unter anderem> auch dem, von Arduino ausgehenden, Missverständnis irgendwelche Header> seien "Libraries" entgegenwirken.
Ich habe ja nichts dagegen, wenn man die Werkzeuge von der Pike auf
kennen lernt.
Möchte aber zu bedenken geben, dass ein Anfänger an einem Punkt anfangen
muss. Alles gleichzeitig geht nicht.
Nicht ohne Grund dauert eine Vollzeitausbildung ca. 3,5 Jahre.
Plus ca. ein 1/2 Jahr, pro jede Sprache und pro Spezialgebiet.
Alles verbunden, mit viel üben, Erfahrung machen.
Es ist also eher ein Prozess über 10 Jahre, oder so, bis man wirklich
gut ist. Und selbst dann kann man noch nicht alle Tools, Sprachen und
Anwendungen kennen.
Christopher J. schrieb:> "Programmiert wird mit Cherry-Tastatur" oder> "Ich programmiere mit einem Samsung-Monitor" hätten wohl eine ähnliche> Aussagekraft und ich frage mich dann ob diese Leute überhaupt die> leiseste Ahnung haben, was ihre IDE im Hintergrund eigentlich macht.
Vorsicht Ironie:
Ich finde, dass man zuerst sein eigenes Betriebssystem incl. Kompiler
und Toolchain schreiben sollte, damit man das, womit man umgeht, auch in
der Tiefe verstanden hat. Dann erst sollte man sein erstes eigenes
"Hello World" Programm schreiben dürfen.
Arduino F. schrieb:> Vorsicht Ironie:> Ich finde, dass man zuerst sein eigenes Betriebssystem incl. Kompiler> und Toolchain schreiben sollte, damit man das, womit man umgeht, auch in> der Tiefe verstanden hat. Dann erst sollte man sein erstes eigenes> "Hello World" Programm schreiben dürfen.
<ironie>
Ich plädiere dafür, daß alle Anfänger vor der Nutzung ihres ersten
Smartphones, Computers, Tablets usw. erst mal die Basics lernen, und
eine CPU aus diskreten Bauteilen zusammenlöten, um darauf dann ihr
völlig proprietäres Betriebssystem zu implementieren 8-D,
Beitrag "Rechner aus einzelnen BC547 Transistoren"
oder gleich mit AVR-Z80-Emulation inkl. CP/M... ;-)
https://www.mikrocontroller.net/articles/AVR_CP/M
</ironie>
Wer fragt, wie er vom Arduino "wegkommen" soll,
ist nach meiner Meinung noch nicht so weit.
jetzt bin ich wieder bei der Picaxe und Arduino.
Auf Grund dessen ,das ich mit dem Arduino angefangen habe und so die
Klammeraffenprogrammierung erlernen und Nutzen kann, überlege
ich ernsthaft zurück zum AVR und Pic zu gehen.
Ich habe diese Teile ja noch im umfangreichen Sortiment!
Überlege natürlich auch wie ich noch die vielen vorhandenen C-Control/
Pro 32 nutzen kann.