Hallo,
Im Moment programmieren ich noch mit der ArduinoPlattform(C)
Ich frage mich jetzt schon seit längerem, wie sich die
Programmiersprache in der Arduino Umgebung zu richtigem C++
unterscheidet. Anfangs dachte ich, dass sich die Umgebungen sehr ähneln
und hatte gedacht, C ist eine gute Sprache und auf dem Lernpaket stand
in C. Aber ich hab immer wieder bemerkt dass Arduino manchmal sogar
verpönt wird.
Und dafür würde ich gerne den Grund kennen lernen. Im Hinterkopf habe
ich im Sinn, eine gescheidere Programmierumgebung anzulegen.
Vielen dank an die die mir die Erleuchtung bringen. ;)
Dein Post verwirrt etwas.
"richtiges" C++ ist eben objektorientiert im Gegensatz zu C. Das hat
aber nichts mit Arduino zu tun. Die Sprache verwendet Arduino genau so
wie Visual Studio, Eclipse und co?!
du musst unterscheiden ! C ist nicht gleich Arduino !
Arduino wird nur verpöhnt weil jeder sich im Baukastenprinzip einfachste
Programmierungen zusammen klicken kann ;-)
asterix schrieb:> Arduino wird nur verpöhnt weil jeder sich im Baukastenprinzip einfachste> Programmierungen zusammen klicken kann ;-)
Und weil viele User oft die einfachsten Grundlagen von (digitaler)
Elektronik nicht beherschen.
asterix schrieb:> Arduino wird nur verpöhnt weil jeder sich im Baukastenprinzip einfachste> Programmierungen zusammen klicken kann ;-
Und dann, wenn es natürlich so nicht funktioniert, im Forum fragt,
warum "sein" zusammenkopierter "Code" nicht das tut, was der Kopierer
will, sondern das, was da steht...
Hatten wir (wieder mal) vor Kurzem hier im
Beitrag "Zahlenschloss - Fehler"
Marius schrieb:> in C. Aber ich hab immer wieder bemerkt dass Arduino manchmal sogar> verpönt wird.
Es ist nicht das Arduino System an sich, das verpönt wird. Es ist mehr
die Unwilligkeit vieler Arduino Programmierer, richtiges Programmieren
zu lernen. Da wird auf Teufel komm raus mit fertigen Komponenten nur so
um sich geschmissen, von denen man keine Ahnung hat, wie sie
funktionieren oder wie die Programmiersprache eigentlich funktioniert
die man benutzt.
Solange alles klappt, ist das auch ok. Nur ist dann eben auch das
Geschrei riesengroß, wenn es mal nicht klappt und dann nur noch
richtiges Programmieren weiterhilft.
Ich formulier es mal so: "Malen nach Zahlen" hat seine Berechtigung. Nur
sollte man es nicht mit richtiger Malerei verwechseln. Wer das malen
eines Bildes mit dem Aufüllen von vorgedruckten Farbflächen anhand eines
Nummerncodes verwechselt, der hat etwas grundlegendes nicht verstanden.
In diesem Sinne habe ich vor jemanden, der ein derartiges Machwerk an
der Wand hängen hat weit weniger Respekt als vor jemandem, der mit
Zeichenblock und Stift in die Natur hinausgeht und das zeichnet was er
sieht. Selbst wenn es nicht dieselbe Qualität hat, wie der
Farbflächen-Rembrandt des ersten Malers, der aus der Werkstoffpackung
entstanden ist.
Was bei 'Malen nach Zahlen' für jedermann einsichtig ist, ist in der
Arduino-Programmierung bei weitem nicht einsichtig. Wobei es natürlich
auch viele gibt, die sich dann eben nicht nur damit zufrieden geben,
irgendwelche Demo-Programme nach gutdünken und mehr schlecht als recht
abzuwandeln, sondern die tatsächlich auch wissen wollen, was da alles im
Hintergrund passiert und tatsächlich mit den Grundlagen beginnend die
Programmierung erlernen (und nein, damit meine ich nicht das
anlassbezogene Erfragen von Achtelwissen in Foren)
> Ich frage mich jetzt schon seit längerem, wie sich die> Programmiersprache in der Arduino Umgebung zu richtigem> C++ unterscheidet.
Im Prinzip gar nicht.
Was du programmierst ist C++.
Es wird lediglich ein kleiner 'Textumwandlungs'-Prozess davor
geschaltet, der den Source-Code ein wenig ergänzt. Aber im Prinzip
programmierst du deinen AVR mit C++, wobei dir ein einfaches Framework
bereits vorgegeben ist.
Vielen dank an die tollen antworten,
In dem Fall wird bei Arduino noch etwas dazugemacht bzw. Umgeschrieben.
Das heißt also, die Sprache C ist nur ein Zwischenschritt und Arduino
wandelt das dann noch etwas um?
Nennt man das Baukastenprinzip weil es die Software schon gibt und man
sie nur kopieren und einfügen kann, oder hab ich des falsch verstanden?
Wie ist das denn weil in vielen Firmen wird ja auch mit C programmiert.
Wenn ich da frage sagen die also in C. Also gibt es in dem Fall keine
Computerplatform bei der man direkt in C programmiert,(so war die Denke,
bis jetzt) sonder es gibt da dann immer noch ein Programm wie bei mir
zum Beispiel bei Arduino?
Ich fand die jetzigen toll, aber es sind dadurch neue Fragen entstanden,
von dem her währ ich total Happy wenn ihr mir weiterhin solche Antworten
geben könntet.
DANKE
Marius schrieb:> Wie ist das denn weil in vielen Firmen wird ja auch mit C programmiert.> Wenn ich da frage sagen die also in C. Also gibt es in dem Fall keine> Computerplatform bei der man direkt in C programmiert,(so war die Denke,> bis jetzt) sonder es gibt da dann immer noch ein Programm wie bei mir> zum Beispiel bei Arduino?
Du schreibst wirr.
C kann mit einem beliebigen Texteditor geschrieben werden. Du fütterst
dann deinen Compiler mit den .c und .h Dateien und der Linker macht dann
ein Programm daraus.
Marius schrieb:> Also gibt es in dem Fall keine Computerplatform bei der man direkt in C> programmiert,(so war die Denke, bis jetzt)
Richtig: falsch gedacht!
> sonder es gibt da dann immer> noch ein Programm wie bei mir zum Beispiel bei Arduino?
Ja. Beim Arduino heißt die Software nur blöderweise so wie die Hardware:
Arduino. Du installierst die Arduino Entwicklungsumgebung und
"programmierst" damit deinen Arduino Mikrocontroller.
"Die Firmen" haben einen ATmega und "programmieren" den mit dem GCC
Compiler. Oder sie haben einen STM32 und "programmieren" den mit der
Eclipse IDE.
Ich habe "programmieren" immer in Hochkommas geschrieben, denn
"programmieren" bedeutet schon wieder zweierlei: 1. Übersetzen des
C-Codes mit einem Compiler/Toolchain und 2. Übertragen des Binärfiles
auf den uC.
Das alles ist ultraweichgespült und versteckt in der Arduino
Entwicklungsumgebung. Deshalb ist dort (sofern alles läuft) das
"Programmieren"so einfach...
foo schrieb:> Du fütterst dann deinen Compiler mit den .c und .h Dateien und der> Linker macht dann ein Programm daraus.
Ich würde behaupten, das war vorher schon ein Programm und es wird über
den Umweg eines Assemblerfiles eine Binärdatei draus...
Marius schrieb:> In dem Fall wird bei Arduino noch etwas dazugemacht bzw. Umgeschrieben.> Das heißt also, die Sprache C ist nur ein Zwischenschritt und Arduino> wandelt das dann noch etwas um?
Arduino ist von der Software her C++ plus Arduino Core-Library plus
externe Libraries plus einige "Magic Tricks".
Einer dieser "Magic Tricks" der Arduino-Software ist zum Beispiel, dass
Du keine "main" Funktion schreibst, sondern eine
- setup-Funktion, die einmalig zu Beginn läuft und eine
- loop-Funktion, die immer wieder "von alleine" neu startet, wenn das
Ende der Funktion erreicht ist.
Der zweite "Magic Trick" der Arduino-Software ist, dass Du grundsätzlich
fertige benutzbare Timerfunktionen mit Millisekunden- und
Microsekundenauflösung zur Verfügung gestellt bekommst, so dass Du
direkt damit loslegen kannst, Dinge per Zeitablauf zu steuern, ohne zu
wissen, wie in der AVR-Hardware ein Timer programmiert werden muß.
Ansonsten ist das ganz normal C++.
Dass Arduino-Programme sich so stark von "herkömmlichen" Programmen
unterscheiden, liegt hauptsächlich daran, dass die Arduino Core-Library
extrem einfach zu verwendende "Komfortfunktionen" und "Objekte" zur
Verfügung stellt, die sich selbst von Anfängern extrem einfach verwenden
lassen und daher auch gerne Verwendung finden.
Unter dem "Komfort" vieler dieser "Komfortfunktionen" leidet dann zwar
oftmals die Performance, und vieles läuft dann langsamer ab als es
möglich wäre. Aber das ist vielen Arduino-Programmierern egal, weil es
ihnen oft nicht darauf ankommt, dass eine Aktion die superlange Zeit von
einer zehntausendstel Sekunde benötigt, wenn man dasselbe mit optimaler
Programmierung auch in einer Millionstel Sekunde hinbekommen könnte.
Wer es dann irgendwann doch schneller braucht, der muß dann eben einigen
Arduino-Komfortfunktionen abschwören und Dinge auf dann andere Art
programmieren. Das ist aber unter Arduino genau so möglich wie unter
Atmega Studio, denn unter der Haube werkelt mit dem AVR GCC Compiler
exakt derselbe Compiler, mit dem man denselben schnellen Code auch unter
Arduino schreiben und Kompilieren kann.
Karl Heinz schrieb:> Da wird auf Teufel komm raus mit fertigen Komponenten nur so> um sich geschmissen, von denen man keine Ahnung hat, wie sie> funktionieren oder wie die Programmiersprache eigentlich funktioniert> die man benutzt.
Tja, in gewisser Weise ist es aber nicht ihr Fehler, daß die
Softwareentwicklung noch immer nicht den Reifegrad erreicht hat, der
viele schon vor zwanzig Jahren erreicht glaubten.
Im Baumarkt kaufe ich mit auch eine Schraube und erwarte, daß (a) mein
Schraubenzieher kompatibel ist (okay, da gibts auch schon Wildwuchs,
aber zumindest eine überschaubare Zahl von Systemen, kein Kontinuum von
Möglichkeiten) und (b) daß ich die Schraube einfach verwenden kann, ohne
Materialwissenschaften studiert zu haben.
Nur in der Softwareentwicklung (und der Computertechnik allgemein) muß
man im Prinzip beliebig tief runtergehen.
Bei manchen Problemen streng genommen noch weit unter Assemblerebene.
Zum Glück für alle, die "nur" Assembler beherrschen, gibts solche
Spezialisten in der Regel nicht in Feld-Wald-und-Wiesen-Webforen, so daß
ihnen die Häme erspart bleibt, die sie selbst Arduino-Usern angedeihen
lassen.
"Bist du zu dumm, den Mikrocode deines Prozessors zu verstehen? Und
wieso glaubst du eigentlich, ein Lauflicht basteln zu können, wenn du
noch nichtmal ein Stück Silizium selbst dotiert hast?" wäre doch mal
eine coole Ansage. g
Hallo Marius,
hier findest Du die richtige Antwort:
Beitrag "Re: Arduino - bringt's das ?"
P.s: Wieso meldet sich eigentlich der cybertroll noch nicht, obwohl
"Arduino" in der Überschrift steht?
Lothar Miller schrieb:> Ich würde behaupten, das war vorher schon ein Programm und es wird über> den Umweg eines Assemblerfiles eine Binärdatei draus...
Hast recht, ausführbares Programm hätt ich schreiben sollen.
Moin,
also ich hab den wechsel gewagt und muss auch sagen das hat mich
ziemlich ins kalte wasser geknallt...
Ich bin von Arduino auf Nen ATmega32A und den Programmier ich via Atmel
Studio.
Wenn du noch nie nen AVR controller programmiert hast und C auch noch
nie geschrieben hast. Dann ist das hart (war für mich jedenfalls so)
Arduino betüchert einem schon so, aber ich muss sagen ein richtigen AVR
zu bedienen find ich irgendwie auch schöner :D
Grüße
Fritz schrieb:> Im Baumarkt kaufe ich mit auch eine Schraube und erwarte, daß (a) mein> Schraubenzieher kompatibel ist (okay, da gibts auch schon Wildwuchs,> aber zumindest eine überschaubare Zahl von Systemen, kein Kontinuum von> Möglichkeiten) und (b) daß ich die Schraube einfach verwenden kann, ohne> Materialwissenschaften studiert zu haben.
Tja, nur kommen dann die Leute auf die Idee, mit einen 6mm Dübel und
einer 4mm Schraube wunder was an die Wand schrauben zu wollen und
wundern sich dann, weil es nicht hält / abreißt. (Zu kleine Schraube,
falscher Dübel für die Wand etc...)
Dann gibt es noch bei einigen Schrauben verschiedene Festigkeitsklassen
und dann kommt die Frage auf, warum es nicht 4.6er Klasse tut (Baumarkt)
und es jetzt die "teure" 8.8er sein muss... usw.
Martin Kathke schrieb:> Wenn du noch nie nen AVR controller programmiert hast und C auch noch> nie geschrieben hast.
Wenn du vorher Arduino gemacht hast, dann hast du aber schon alle
Syntaxelemente von C verwendet (oder solltest es zumindest)...
Oder andersrum: wenn ich die richtige Denkweise habe, dann kann ich auch
ganz einfach Arduino, weil die Sprache genau die selbe ist. Das hatte
ich aber schon im Beitrag "Re: Von Arduino zu C(++)"
erwähnt...
Wenn ich aber erst Arduino mache und mir ohne Nachdenken nur irgendwas
zusammenkopiere, dann lerne ich dabei nichts. Ich muss beim Arduino
schon auch zuerst verstehen, was diese if-Abfragen und for-Schleifen
machen, wie ich ein Array anlege und darauf zugreife, was ein String ist
und wie der funktioniert. Nur wenn ich das weiß, kann ich was mit dem
System anfangen. Und genau diesen ersten Schritt überspringen gefühlt
89% der Arduino-Käufer...
verpöhnen oder nicht verpöhnen das ist hier die frage ;-)
Grundsätzlich mal ist die Wahl der Programmiersprache kein Frage welche
die RICHTIG oder die WAHRE oder was auch immer ist. Im wesentlichen ist
die Wahl der Programmiersprache eine Frage der Aufgabenstellung und der
daraus erwachsenden Systemkomplexität. Wenn das was zu programmieren ist
auf einen ATtiny4 mit 32 Byte SRAM soll ist die Sprache der Wahl
Assembler wenn du irgendetwas baust was von 1K bis sagen wir 256K groß
ist dann ist C wohl die beste Wahl, aber ober halb der 1MB Systemgröße
ist die effektivste Sprache C++ und wenn es dann oberhalb der 1G ist
gehts nicht mehr ohne Betriebssystem und leistungsfähiges framework und
dann wird die Wahl wahrscheinlich auf JAVA oder C# fallen ... Und dann
kommen wir zum nächsten Glaubenskrieg wenn schon OOP warum dann nicht
gleich mit der UML ;-)
schau mal hier rein:
www.avr-cpp.de
www.mySTM32.de
www.myXMC.de
www.myUGL.de
... was mich hier fasziniert ist die zunehmende portabilität der
Anwendungen... ich hätte nie gedacht dass man eine doch recht komplexe
AVR oder STM32 mit erstaunlich geringem Aufwand (Stunden) zum beispiel
auf einen XMC4500 portieren kann... wir habens gemacht und es
funktioniert tadellos
Gruß J.
Lothar Miller schrieb:> Wenn du vorher Arduino gemacht hast, dann hast du aber schon alle> Syntaxelemente von C verwendet (oder solltest es zumindest)...
Das aufjedenfall.
Ich persönlich hatte garnicht die großen Probleme mit C aber das man
aufeinmal nur mit einzelnen bits arbeitet, von Pins umdenken muss auf
ports, die << oder |= _BV() bzw &= ~_BV() sachen da hab ich schon ne
ganze weile gebraucht bis ich es richtig verstanden hatte und auch
sinnvoll anzuwenden wusste.
Man muss halt umdenken und wenn man dann auch noch auf einmal ne neue
entwicklungsumgebung hat, fliegt man ganz schön ins kalte Wasser.
Das war jedenfalls meine Erfahrung, vielleicht habe ich auch die
falschen tutorials gelesen oder war einfach ein bisschen doof :D
also ich verpön arduino und raspi.
ansich sind das ja tolle spielzeuge aber es ist gemein einem
ahnungslosen zu erzählen dabei kann man was lernen.
die entwickler preisen ihr zeugs als schulungsdings und wollen schüler
für die technik begeistern.
im raspi buch steht, etwas anders geschriebne, das es für die entwickler
erschreckend war wie viele compterbegeisterte keine ahnung haben es aber
behaupten dabei könne sie nur klicken um z.b. ein spiel zu starten.
es gab mal eine zeit da brauchte es dafür noch eine basic zeile.
da ist es natürlich klar das man nicht mehr von anfangan spielerisch
lernt.
allerdings machen die raspi und arduino leute genau das gleiche.
systeme für idioten herstellen.
ich wette die entwickler selber haben mit assembler angefangen und
schöne dicke bücher gehabt wo eben hardware des prozessors erklärt
wird.
die hatte glück.
es ist verantwortungslos sowas als lernsystem anzupreisen.
>> es ist verantwortungslos sowas als lernsystem anzupreisen.
seh ich anders. Es währe verantwortungslos, es als das Ende der
Fahnenstange zu preisen.
Und ein normaler Desktop Pc ist auch nix anderes als ein hochkomplexes
System mit nem Kilometer an Abstraktionsebenen.
Jasson schrieb:> Und ein normaler Desktop Pc ist auch nix anderes als ein hochkomplexes> System mit nem Kilometer an Abstraktionsebenen.
Richtig.
Für Lieschen Müller, die ein bischen Textverarbeitung machen will,
reicht das auch.
Wer aber so ein Ding programmieren will, muss sich darauf einstellen
eine steile Lernkurve vor sich zu haben. Das ist auf dem Arduino auch
nicht anders. Selbst wenn der Hersteller (auf amerikanische Verhältnisse
abgestimmt) versichert, wie einfach das nicht alles wäre. An Freaks
verkaufen, die sich auch reintigern, war gestern. Heute muss alles "it's
so easy" sein. Und natürlich "fat free".
Auch wenn Autofahren heutzutage recht problemlos ist (die 3 Pedale,
Lenkrad ein paar Schalter rund ums Lenkrad hat man mit ein wenig Übung
schnell im Griff), wer Automechaniker werden will, muss tiefer in die
Technik einsteigen. Und zwar egal ob der Hersteller dir versichert, dass
jeder der sein Auto fahren kann, es auch reparieren könne. Ein wenig mit
dem Hammer auf den Vergaser klopfen ist keine wie auch immer
fachgerechte Motorreparatur. Sofern er den Vergaser überhaupt findet und
nicht statt dessen einfach nur etwas Wischwasser nachfüllt. Because it
is so easy.
Wir müssen schon ein wenig unterscheiden zwischen dem reinen Anwender
und dem der die Maschinerie für den Anwender bereit stellt. Letzterer
muss deutlich mehr können. Diese Problematik stellt sich in so gut wie
allen technischen Bereichen und das wird auch von jedem akzeptiert. Nur
seltsamerweise bei der Programmierung von Computern denkt jeder, der 3
Excel Zellen ausfüllen kann, die dann auch im 5.ten Anlauf funktionieren
weil er den Zirkelschluss endlich aufgelöst hat, er wäre der
Programmier-Superstar der nichts mehr dazulernen muss.
>> Und ein normaler Desktop Pc ist auch nix anderes als ein hochkomplexes>> System mit nem Kilometer an Abstraktionsebenen.>Richtig.>Für Lieschen Müller, die ein bischen Textverarbeitung machen will,>reicht das auch.
Soso, arbeitest Du mit dem Taschenrechner, oder hast Du einen PC?
Aber Scherz beiseite: Was ist mit UML ? Ist das auch was für Lieschen
Müller und ihrer Abstraktionsebene?
>Auch wenn Autofahren heutzutage recht problemlos ist (die 3 Pedale,>Lenkrad ein paar Schalter rund ums Lenkrad hat man mit ein wenig Übung>schnell im Griff), wer Automechaniker werden will, muss tiefer in die>Technik einsteigen.
Wie gut kennst Du Dich mit den Dotierungsverfahren für schnelle
Prozessoren aus? Wer Entwickler sein will, muss tiefer in die Technik
einsteigen.
Hans schrieb:> Wie gut kennst Du Dich mit den Dotierungsverfahren für schnelle> Prozessoren aus? Wer Entwickler sein will, muss tiefer in die Technik> einsteigen.
Sag ich doch, immer diesselben Nulpen mit den denselben Null-Argumenten.
Und kommen sich wahrscheinlich noch wahnsinnig scharfsinnig dabei vor.
Aber wie soll man mit jemandem Disktutieren der intellektuell nicht mal
in der Lage ist, das spezifische Problem mit Arduino überhaupt zu
erfassen, und stattdessen allgemein auf Abstraktionsebenen rumreitet?
Ich kann über solche Typen nur noch lachen, inhaltlich bin ich zu 100%
mit dieser Thematik durch. Das ist Perlen vor die Säue.
Siehst du, hier hab ich vorhergesagt dass der nächste mit so einem
Deppen-Vergleich anrückt:
Beitrag "Re: Arduino - bringt's das ?"> Jetzt fehlt noch der> Schenkelklopfer vom Auto welches man auch nicht selber zusammenbaut,> oder dem Quarzsand aus dem man ja auch nicht selbst seine Controller> backt.
>Sag ich doch, immer diesselben Nulpen mit den denselben Null-Argumenten.>Und kommen sich wahrscheinlich noch wahnsinnig scharfsinnig dabei vor.
Hey cyberlord,
Jetzt rege Dich doch nicht so auf.
Ich weiß schon, dass Du das ein oder andere Mikrocontrollerbit besser
kennst als die anderen Praktikanten. Das veranlasst Dich bisweilen, die
Welt etwas einseitig zu sehen. Aber mit der Zeit wirst Du noch etwas an
Erfahrung gewinnen und merken, dass die Entwicklung weiter geht. Die
Technik, die Du bis jetzt kennengelernt hast ändert sich rasant. Die
Abstraktionsebenen werden höher, das war bei den PCs schon so. Da gab es
Leute, die wollten partout nicht weg von Assembler und nie eine Maus
benutzen, die waren auf einem ähnlichen Stand wie Du jetzt. Aber hey, Du
bist noch jung und wenn Du Dich der Technik öffnest, kannst Du auch noch
ein guter Entwickler werden, der mit dem aktuellen Stand der Zeit
mithalten kann.
Grüße,
Hans