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"
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
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...
:
Bearbeitet durch Moderator
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.
:
Bearbeitet durch User
>> 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.
:
Bearbeitet durch User
>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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.