Pages: [1]   Go Down
Author Topic: Literaturtipps für Programmiersprache C  (Read 1488 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Full Member
***
Karma: 3
Posts: 126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

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?

Danke schon mal.


Grüße

Martin
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 58
Posts: 3043
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
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 )

Quote
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.

(Deutsche Literaturtipps muss ich passen ...)
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21590
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Standartwerk für C ist
Programmieren in C von Dennis M. Ritchie (Autor), Brian W. Kernighan (Autor)
zB http://www.amazon.de/Programmieren-C-Reference-Manual-deutscher-Sprache/dp/3446154973
Dennis M. Ritchie und Brian W. Kernighan sind die Entwickler von C
http://de.wikipedia.org/wiki/Dennis_Ritchie
C++ ist eine objektorientierte "Erweiterung" von C.

Arduino versteckt viele Internas und es gibt eigentlich keine halbwegs (umfassende) Erklärung wie und welche Bibiotheken, Definitionen und wie die Hardware angesprochen wird.

Grüße Uwe

Logged

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3482
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Die Standardwerke sind "Kernighan and Ritchie" auch bekannt als "K&R" sowie "stroustrup".

Davon abgesehen empfehle ich mein Lernpaket http://www.amazon.de/gp/product/3645651306/?ie=UTF8&camp=1638&creative=6742&linkCode=ur2&site-redirect=de&tag=wwwblinkenlig-21. Im Buch gibt es ein Kapitel "Hinter den Kulissen" in dem ich sehr detailiert darauf eingehe wie die Arduino IDE die Sketches zu C Programmen umfrisiert.
Logged

Check out my experiments http://blog.blinkenlight.net

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Martin,

hast du denn schon Erfahrung in der Programmierung? Falls ja, welche Sprachen?

Rudi
Logged

Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1491
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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):

Quote
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:
http://syque.com/cstyle/index.htm
Leider in Englisch...

Grüße,
Oliver
« Last Edit: January 20, 2013, 06:51:11 am by uwefed » Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Schau mal hier, wen es nur um allgemeines C geht:
http://openbook.galileocomputing.de/c_von_a_bis_z/
Galileo Computing stellt einige Bücher zum freien
Download ins Internet.

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

0
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3482
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Check out my experiments http://blog.blinkenlight.net

Germany
Offline Offline
Edison Member
*
Karma: 136
Posts: 1491
If you believe something is right, you won't see what's wrong (David Straker).
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Addi

Guter Tip, Karma +.

Danke,
Oliver
Logged

Germany
Offline Offline
Full Member
***
Karma: 3
Posts: 126
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,

zunächst danke für die Tipps!

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.


Grüße

Martin 
Logged

Offline Offline
God Member
*****
Karma: 11
Posts: 599
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo,

habe vor wenigen Monaten noch nicht programmiert und mit der Arduinoumgebung angefangen.

Da ich solche Codes in Zukunft verstehen möchte..

Code:
//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:

http://openbook.galileocomputing.de/c_von_a_bis_z/

Ob das nun der "richtige" Weg ist, weiss ich nicht; vielleicht aber Ihr.  smiley-kiss

Gruß Chris
Logged


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 263
Posts: 21590
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Chris zu Deinem Verständnisproblem:

Code:
//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.

Code:
//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.

Kapitel 6 von http://openbook.galileocomputing.de/c_von_a_bis_z/ erklärt einiges.

Grüße Uwe
« Last Edit: January 20, 2013, 07:03:52 am by uwefed » Logged

Offline Offline
Full Member
***
Karma: 5
Posts: 193
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Addi
Logged

  / \    _|  _| o
 /--\ (_| (_| |

Pages: [1]   Go Up
Jump to: