welche (Deutschsprachige) Literatur wäre zur Erlernung der Programmiersprache C, speziell für die ATMEL-AVR, zu empfehlen?
Ich möchte gerne ein wenig die Hintergründe der ARDUINO-Bibliotheken verstehen um später auch Anpassungen an meine Bedürfnisse vornehmen zu können.
Wenn ich es richtig verstanden habe, ist ja die dem ARDUINO-Projekt zu Gunde liegende Programmiersprache gewissermaßen 'abgespecktes' C.
Gibt es auch eine, evtl. sogar freie, IDE, welche mit dem Compiler für die AVR-Controller zusammenarbeitet?
Gibt es auch eine, evtl. sogar freie, IDE, welche mit dem Compiler für die AVR-Controller zusammenarbeitet?
-->die Arduino IDE verwendet avr gcc
( gibt auch noch andere, z.B. einen Eclipse-Plugin, aber diese hier ist am einfachsten zum reinkommen )
Wenn ich es richtig verstanden habe, ist ja die dem ARDUINO-Projekt zu Gunde liegende Programmiersprache gewissermaßen 'abgespecktes' C.
Es ist "richtiges C", eher ein abgespecktes C++.
Du könntest den Code der Bibliotheken, die dich interessieren auch direkt in deine Sketch-Ordner packen und innerhalb der Arduino IDE in Extra-Tabs anzeigen und modifizieren.
Arduino versteckt viele Internas und es gibt eigentlich keine halbwegs (umfassende) Erklärung wie und welche Bibiotheken, Definitionen und wie die Hardware angesprochen wird.
Die Programmiersprache für den Arduino beschränkt sich auf ein Subset von C++. Das finde ich ganz gut und im allgemeinen, braucht man den Stroustrup wohl nicht gelesen zu haben.
Hier mal ein Beispiel aus der Arduino Welt:
Beim Übergang von 0023 auf 1.0 wurde der Prototyp einer virtuellen Memberfunktion der Print Klasse geändert. Das führte dazu, dass einige Libs nicht mehr funktionierten.
Wer den Stroustrup gelesen hat, den Vererbungsmechanismus und die virtuellen Funktionen verstanden hat, kann das Problem anhand der IDE Fehlermeldung eingrenzen und leicht selbst lösen.
Wer den Stroustrup nicht gelesen hat, dem wird aber auch gerne hier im Forum geholfen (gerade bei solchen Fragen).
Ein anderes Beispiel ist die PROGMEM Thematik. Gerade im Zusammenhang mit dem neu eingeführten F() Makro werden hier gnu-Compiler und C++ mäßig alle Register gezogen. Ein Buch gibt es da wohl nicht, am besten: Ausprobieren. Und ich finde die Beischreibungen auf den Arduino Seiten gar nicht so schlecht (wenn auch etwas knapp):
You can pass flash-memory based strings to Serial.print() by wrapping them with F(). For example :
Serial.print(F(“Hello World”))
Am Schluß doch noch von mir eine Buchempfehlung. Da das Buch mittlerweile im Netz steht, kann man auch gleich anfangen zu lesen:
Ich habe mal gerade in das Galileo Buch reingeschaut. Bis auf die Tatsache, daß es nicht arduinospezifisch ist, ist es wirklich sehr gut. Für umsonst und auf Deutsch wird man wohl kaum eine bessere Quelle finden. Zusammen mit der avr-libc Doku sollte man da schon ziemlich weit kommen.
Dass einem hier im Forum geholfen wird, habe ich schon lesenderweise bemerkt, ich werde das zu gegebener Zeit bestimmt noch in Anspruch nehmen!
Zur Frage von Rudi, womit ich schon Programmiererfahrungen gesammelt habe:
Ganz allgemein (auf PC): Früher (zu MS-DOS seligen Zeiten) Turbo-Pascal und später dann unter MS-Windows Delphi (ist gewissermaßen 'Visual-Pascal')
Für Microcontroller: JAL für PIC. Dies ist eine freie Entwicklungsumgebung und lehnt sich von der Sprachsyntax her stark an Pascal an.
Da diese Umgebung jedoch nur wenig verbreitet ist, werden bei weitem nicht alle Contoller der PIC-Familie unterstützt, auch gibt es nur (gemessen an der Anzahl für ARDUINO) wenige Bibliotheken, so dass man sehr viel selbst programmieren bzw. anpassen muss.
Diese Einschränkungen, die mir durch die Benutzung van JAL auferlegt wurden, haben dazu geführt, dass ich für einige in Arbeit befindliche Projekte auf den ARDUINO umgestiegen bin.
Aktuell arbeite ich an einer Steuerung für einen Vorverstärker samt Ausgabe der Betriebszustände auf ein Display.
Falls sich jemand von Euch dafür interessiert, kann ich mal das Blockschaltbild und den Funktionsumfang der Software einstellen.
habe vor wenigen Monaten noch nicht programmiert und mit der Arduinoumgebung angefangen.
Da ich solche Codes in Zukunft verstehen möchte..
//2 Pins als Ausgang deklarieren und einen als Eingang
DDRA = 0b00000011; // 6 Eingänge 2 Ausgänge
//den ersten Pin auf "High" setzen
PORTA |= (1 << PA0);
//den gleichen Pin auf "Low" setzen
PORTA &= ~(1 << PA0);
//überprüfen ob der Eingang gesetzt ist
if(PINA2) {
//Ausgang setzen
PORTA |= (1 << PA1);
} else {
PORTA &= ~(1 << PA1);
}
..und mir meine ganzen schlauen Arduinobücher dabei nicht helfen können, frage ich mich nun, wie es weitergehen könnte.
Sollte ich mir nun C, C# oder C++ aneignen, um weiterzukommen?
Hab mir jedenfalls mal "Programmieren in C: Mit dem C-Reference Manual in deutscher Sprache" bestellt und lese mich momentan hier ein:
Ob das nun der "richtige" Weg ist, weiss ich nicht; vielleicht aber Ihr. :*
//2 Pins als Ausgang deklarieren und einen als Eingang
DDRA = 0b00000011; // 6 Eingänge 2 Ausgänge
DDRA ist das Register des PORT A das definiert ob ein PIN Eingang oder Ausgang ist. bei 0 Eingang und bei 1 Ausgang.
//den ersten Pin auf "High" setzen
PORTA |= (1 << PA0);
//den gleichen Pin auf "Low" setzen
PORTA &= ~(1 << PA0);
PORTA ist das Register das die Ausgangsspannung (H oder L) der Pins bestimmt.
Weil hier nur 1 Pin geändert werden soll wird zuerst PORTA gelesen und dann Binär gesetz. |: die Oderverknüpfung mit 1 setzt ein Bit auf 1. "1<<PA0" verschibt die 1 um PA0 stellen Shift. "~" negiert ein Bit, aus 1 wird 0.
Das sind alles nicht C-spezifische Programme sondern Boolean-Logik und Controller-spezifische Register.
Chris72622:
Sollte ich mir nun C, C# oder C++ aneignen, um weiterzukommen?
C ist schon die Richtige wahl,weil die IDE verwendet C++(C++ ist mit C kompatibel). C# würde ich
nicht lernen, weil es nur für Microsofts .Net Framework verfügbar ist. Wenn du C# lernen
möchtest wäre Gadgeteer etwas für dich.