Hey Nur eine kurze Frage: Grundlagen für den Arduino habe ich schon, doch die sind noch zu wenig gefestigt und darum habe ich mich entschieden, um die Sprache(C++) besser verstehen zu können, zuerst mal das C++ schön systematisch lernen und danach mich dem Microcontroller zuwenden. Was meint ihr? Ist das sinnvoll so? Oder hat jemand bessere Lösungsvorschläge? MFG
wenn man teilweise die Fragen hier liest .... Es kann nicht schaden, eine vernünftige Grundlage an C oder C++ zu haben, wenn man programmieren möchte.
Peter schrieb: > und danach mich dem Microcontroller zuwenden. dazu benötigst Du -zuvor- nicht zwingend C oder C++ Peter schrieb: > bessere > Lösungsvorschläge für Lösungsvorschläge muss man erstmal wissen was gelöst werden soll. sprich, was hast du konkret vor? lernen um des lernens willen? > Grundlagen für den Arduino habe ich schon, doch > die sind noch zu wenig gefestigt zum "Festigen" brauchst Du jedenfalls kein C++ zu lernen
Immer sinnvoll ein großes Problem in zwei unabhängige kleinere Teilprobleme zu trennen. Allerdings sind die Teilbereiche von C++, die man sinnvoll auf dem μC verwenden kann, meist nicht Bestandteil eines C++ Tutorials für PCs. IoStreams, virtuelle Methoden, dynamische Objekterzeugung, ... sind nichts, was auf μC uneingeschränkt benutzt werden sollte. Dort braucht man Templates, Overloading, ... und min. C++11. Das kann sogar der alte 4.9er GCC aus der Arduino-IDE, ohne daß man dort aber davon Gebrauch machen würde.
Peter2 schrieb: >> Grundlagen für den Arduino habe ich schon, doch >> die sind noch zu wenig gefestigt > > zum "Festigen" brauchst Du jedenfalls kein C++ zu lernen Du meinst also, daß man lieber bei den Grundlagen bleiben sollte? ;-) Auch wenn man das C++ nicht nur für den Arduino, sondern auch bei anderen Programmierprojekten gebrauchen kann, reichen also die Grundlagen? Seltsame Einstellung...
Einen Teil von C++ kannst du sinnvoll auf Mikrocontrollern verwenden. Du wirst aber auch ein bisschen C benötigen - spätestens wenn du Interrupt-Routinen schreibst. Das Makefile in meiner Hello-World Vorlage eignet sich sowohl für C als auch für C++: http://stefanfrings.de/avr_hello_world/index.html Berücksichtige Carl's Hinweis. Am Einfachsten ist es sicher, wenn du die Programmiersprache zuerst auf einem PC lernst und Dir dann ein Tutorial anschaust, dass zeigt, welche Teile der Sprache auf Mikrocontrollern sinnvoll nutzbar sind. Arduino ist meiner Meinung nach ein schlechtes Vorbild. Dort benötigt man Berichten zufolge über 200 Takte, um eine LED einmal an und wieder aus zu schalten. Wenn man es richtig macht, braucht man dazu nichtmal 10 Takte.
Was das verfassen von C++ Quelltexten angeht gilt meiner Meinung nach das selbe wie in der Grundschule: Wer selber viel liest, dem fällt auch das schreiben von Texten leichter. Leider gilt auch bei C++, dass man noch lange nicht etwas (fehlerfrei) schreiben kann, was man zu lesen in der Lage ist aber es vergrößert doch den "Wortschatz" wenn man fremde Quelltexte liest. Dann kannst du dir irgendein Projekt deiner Wahl schnappen, dich dort einlesen und das nach deinen Vorstellungen erweitern oder verbessern. Wenn du deinen Quelltext frei zur Verfügung stellst wirst du eventuell auch Verbesserungsvorschläge von anderen Leuten bekommen, die eventuell schon etwas erfahrener sind als du. Noch eine Sache aus eigener (bitterer) Erfahrung: Es ist meiner Meinung nach sinnvoller sich zuerst solide Grundkenntnisse in C anzueignen bevor man sich auf C++ stürzt. Ich habe selber den Fehler gemacht mich zuerst mit C++ zu beschäftigen weil ich dachte C++ ist eine Obermenge von C, also muss es besser sein. Für das erlernen von C++ ist aber genau das Gegenteil der Fall: Da C eine Teilmenge von C++ ist, macht es Sinn sich zuerst auf C zu beschränken. Gerade im Mikrocontroller-Umfeld ist C nach wie vor weit verbreitet und wenn du dir z.B. die Arduino- oder mbed-Bibliotheken anschaust wirst du feststellen, dass C++ meistens nur als (sehr dünner) Wrapper um vorhandene C-Bibliotheken verwendet wird. C ist an und für sich ja schon komplex genug (im Vergleich zu anderen Hochsprachen) obwohl es per Definition nur einen Bruchteil der Komplexität von C++ besitzt. Wenn du also irgendwann ein sicheres Verständnis von Zeigern hast, weißt wie ein Struct im Speicher aussieht und verstanden hast wie das eigentlich mit Stack und Heap funktioniert, dann und erst dann würde ich mich an deiner Stelle in die endlosen Weiten von C++ stürzen. Das Wissen was du durch das erlernen von C erwirbst ist jedoch keines Falls verloren, denn du kannst es quasi 1:1 auf C++ anwenden. Wenn du der englischen Sprache mächtig bist kannst du dir z.B. mal den Online-Kurs von Jonathan Valvano auf EDX anschauen: https://courses.edx.org/courses/course-v1:UTAustinX+UT.6.10x+1T2017/a827a8b3cc204927b6efaa49580170d1/ Da lernst du die Grundlagen von C und Assembler und wie ein Microcontroller aufgebaut ist und wie er arbeitet und was man so alles damit anstellen kann.
Peter schrieb: > meint ihr? Ist das sinnvoll so? Nein. Man kann C++ so lernen, daß man auf einem Arduino keine Zeile programmieren kann. Lerne Arduino aus Beispielen zum Arduino (oder Büchern). Wenn du HINTERHER das gante C++ lernst, merkst du, wie einschränkend der Arduino ist.
@Christopher: Ich habe dir ein +1 gegeben, wegen dem Vorschlag, Quelltexte zu veröffentlichen, und zwar ganz genaus aus dem von Dir genannten Grund. Open-Source bedeutet: Geben und Nehmen. Das ist für Beide Seiten eine Gute Sache. Kann ich aus eigener Erfahrung bestätigen.
Peter schrieb: > ...und danach mich dem Microcontroller zuwenden. > > Was meint ihr? Ist das sinnvoll so? Oder hat jemand bessere > Lösungsvorschläge? Verstehe das mal richtig: Mikrocontroller sind Hardware und sie werden zusammen mit anderer Hardware eingesetzt. Der Umstand, daß ein µC eben auch ein Programm benötigt, um sinnvoll zu funktionieren, ist dabei nur ein Teil-Aspekt, aber nicht die Hauptsache. Bevor du also schreibst, daß du dich dem µC zuwenden willst, solltest du erstmal dich selbst fragen, was du eigentlich tun willst. Das Normale im Umgang mit µC besteht darin, daß man Geräte baut, die eine Funktion haben, also beispielsweise ein Thermometer, eine Uhr, eine Steuerung für irgendwas (vom Rolladen über das selbstgebaute Radio bis zum 3D-Drucker), ein Meßgerät oder so ähnlich. Also, sich µC zuzuwenden heißt im Klartext: Geräte konzipieren, deren Funktionalität planen, Hardware entwickeln, Schaltungen und Leiterplatten und dann erst Herumprogrammieren. Also mein Vorschlag wäre, dich hinzusetzen, nachzudenken über deine Ziele und Prioritäten zu setzen. Kein anderer kann das, was dir in deinem Kopf vorschwebt, aus der Ferne riechen. W.S.
Stefan U. schrieb: > Arduino ist meiner Meinung nach ein schlechtes Vorbild. Dort benötigt > man Berichten zufolge über 200 Takte, um eine LED einmal an und wieder > aus zu schalten. Wenn man es richtig macht, braucht man dazu nichtmal 10 > Takte. Für nicht genutzte Rechenzeit gibt es kein Geld zurück.
Stefan U. schrieb: > Wenn man es richtig macht, braucht man dazu nichtmal 10 > Takte. ich schaff's in zwei Takten
Kirk: Scotty, wie lange brauchst du, um den Schaden zu reparieren? Scotty: 24 Stunden, Captain. Kirk: Scotty, schaffst du es in 12 Stunden? Scotty: Für sie mache ich es in 8 Stunden. https://thinkfirstdevelopment.wordpress.com/2011/08/03/zeitschtzung-nach-star-trek-art/ ;) ganz ohne Assembler gg
Ich empfehle, erstmal C zu lernen. Beethoven hat seine erste Sinfonie bekanntlich auch in C und nicht in C++ geschrieben.
Mark B. schrieb: > Stefan U. schrieb: >> Arduino ist meiner Meinung nach ein schlechtes Vorbild. Dort benötigt >> man Berichten zufolge über 200 Takte, um eine LED einmal an und wieder >> aus zu schalten. Wenn man es richtig macht, braucht man dazu nichtmal 10 >> Takte. > > Für nicht genutzte Rechenzeit gibt es kein Geld zurück. Doch: - Lass den Code in einem ISR ablaufen. - Wenn die benötigte Taktzahl zum Abarbeiten des ISR grösser ist als die Feuerfrequenz des ISR (z.B. bei seriellen Übertragungen), verlierst Du Interrupts. - Du hast dann zwei Lösungsmöglichkeiten: 1. Schnelleren Prozessor (= teurer aus mehreren Gründen) 2. ISR auf Umlaufzeit optimieren. Die zweite Variante spart eindeutig Geld. Ob "sparen" und "zurückbekommen" effektiv verschiedene Dinge sind... kann man natürlich diskutieren. Aber ich bin mir sicher, dass Du das weisst. ISR Zyklenoptimierung ist Bestandteil des Grundwerkzeugkastens von (zumindestens systemnah arbeitenden) Embedded Entwicklern. Ob sich das ändern wird, hängt einzig und Allein davon ab, ob Hardware so billig wird, dass zumindestens im Einkauf der Unterschied zwischen einem Minimalprozessor und einem deutlich überdimensionierten Prozessor auf Null schrumpft. Selbst dann wird es Einsatzgebiete geben, wo der kleinstmöglich getaktete Prozessor die Hardware bestimmt (z.B. dort wo Stromverbrauch oder Wärmeentwicklung im kritischen Pfad liegt).
Ruediger A. schrieb: > Doch: > > - Lass den Code in einem ISR ablaufen. > - Wenn die benötigte Taktzahl zum Abarbeiten des ISR grösser ist als die > Feuerfrequenz des ISR (z.B. bei seriellen Übertragungen), verlierst Du > Interrupts. > - Du hast dann zwei Lösungsmöglichkeiten: > 1. Schnelleren Prozessor (= teurer aus mehreren Gründen) > 2. ISR auf Umlaufzeit optimieren. > > Die zweite Variante spart eindeutig Geld. Ob "sparen" und > "zurückbekommen" effektiv verschiedene Dinge sind... kann man natürlich > diskutieren. Schon recht. Nur ist Arduino eben auch für Leute gemacht, die keine Ahnung haben was eine Interrupt Service Routine ist und die auch gar nicht unbedingt bis auf dieses Level hinabsteigen wollen. Einen Musiker, Künstler, (Nicht-Elektronik-)Bastler interessiert es nicht, ob sein Code in 10 oder in 200 Takten ausgeführt wird. Er will ein bestimmtes Ergebnis sehen und die Details der technischen Umsetzung dahinter sind ihm relativ egal.
Mark B. schrieb: > Für nicht genutzte Rechenzeit gibt es kein Geld zurück. Oh doch. Sowas merkst du sehr schön, wenn du die Batterien nicht alle 3 Wochen, sondern alle 3 Tage wechseln mußt, weil der Blödian, der die Firmware gemacht hat, dafür besagte 200 Takte benötigt anstelle von 2 Takten und deshalb den Rechentakt hochschrauben mußte. W.S.
Hi Ihr kloppt Euch jetztz aber hier nicht darum, ob man C-Code irgendwie optimieren kann, oder? Behaltet Das auf jeden Fall für die nächste float-Diskussion im Hinterkopf, wo sinnlos statt 'inc a' 'a=a+1.0' geschrieben steht ;) MfG
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.