Hallo,
ich wollte mit der Mikrocontroller-Programmierung in C anfangen. Dafür
musste ich erstmal C lernen und habe das Buch "C Programmieren von
Anfang an" gekauft. Gleichzeitig lese das Tutorial auf diese Webseite.
Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten.
Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem
Mikrocontroller Programmieren.
Ich wollte wissen ob es ein Buch gibt, wo nur C für
Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das
Buch zu Ende lesen und dann mit dem Tutorial weitermachen?
Danke
Johannes schrieb:> Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten.> Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem> Mikrocontroller Programmieren.
Richtig.
Trotzdem ist es empfehlenswert, die ersten SChritte (ungefähr das erste
Drittel bis ca. die Hälfte) erst mal auf einem PC durchzuackern und sich
dort das Grundgerüst und die Grundlagen der C-Programmierung an sich zu
holen.
µC Programmierung ist dann die Spezialisierung davon. Dort tauchen die
gleichen Grundlagen wieder auf, aber auch spezielle Problemkreise, die
es so auf einem PC nicht gibt.
> Ich wollte wissen ob es ein Buch gibt, wo nur C für> Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das> Buch zu Ende lesen und dann mit dem Tutorial weitermachen?
Ich würde dir raten, dir ein Entwicklungssystem für den PC zu besorgen
und dort erst mal mit dem allgemeinen C-Buch die Basis von C
durchzukauen. Der Umstieg auf den µC fällt danach wesentlich leichter.
Der genaue Grund liegt darin, dass du am PC erst mal eine komplett
funktionioerende Infrastruktur hast. Ein printf auf dem PC gibt auf der
Konsole aus, ohne dass du dich darum kümmern musst. Auf einem µC
hingegen fängst du bei 0 an. Da 'funktioniert' von alleine erst mal gar
nichts. Selbst für das kleinste Lebenszeichen, das der µC von sich gibt,
musst du schon eine Menge wissen.
>> Danke
Johannes schrieb:> Irgendwie habe ich das Gefühl das sind total 2 unterschiedliche Welten.
Das ist richtig.
> Das was in dem Buch erklärt wird, bringt mich nicht weiter mit dem> Mikrocontroller Programmieren.
Naja, ganz so extrem würde ich das nicht sehen. Die C-Syntax ist immer
die gleiche. Man nutzt halt weniger Standard-Bibliothek und mehr direkte
Hardware-I/O und Bitgefummel, aber die Grundlagen sind trotzdem gleich.
Wenn du dir die mal am PC angeeignet hast, ist der µC-Einstieg deutlich
einfacher.
> Ich wollte wissen ob es ein Buch gibt, wo nur C für> Mikrocontroller-Programmierung behandelt wird? oder soll ich weiter das> Buch zu Ende lesen und dann mit dem Tutorial weitermachen?
Das wäre empfehlenswert.
Empfehlen würde ich zum Start, erst einmal zu studieren, wie ein
Computer funktioniert, vom Programmieren her, dabei spielt die Sprache
keine Rolle, erst dann wählt man die Sprache, da ein PC und ein uC sich
da gar nicht verschieden sind, wird so das Verständnis beim
Programmieren von uC wesentlich einfacher.
C Programmierung unter Windows für Anfänger behandelt selten die
Hardwarenahe Programmierung, welche für uC wichtig ist.
Ja, bitte lern erst solides C Grundwissen am PC. Du tust dir selber und
den Leuten hier im Forum damit einen grossen Gefallen. Du musst nicht
bis in die exotischsten Kapitel der C Programmierung vorstossen, aber
die Basics sind halt superwichtig egal was du programmierst. Danach
brauchst du nur noch 15 Minuten um hier im Tutorial die
Bitmanipulationen anzuschauen und du kannst µc programmieren (die
eigentliche Arbeit ist dann die Infos aus den Datenblättern zu holen,
aber C-technisch hast dus im Griff).
Micha Schweizek schrieb:> C Programmierung unter Windows für Anfänger behandelt selten die> Hardwarenahe Programmierung, welche für uC wichtig ist.
In jedem besseren Buch stehen auch Bitmanipulationen u.ä. drin.
Und dann ist C eben C, ob auf dem uC oder PC.
Kann meinen Vorrednern nur zustimmen.
Erst auf dem PC Grundlagen lernen, dann ein kleines Eval-Board kaufen
(fertige Hardware-->keine/wenig Fehler) und damit die ersten Schritte in
Richtung Embedded machen. Wenn man da dann fit ist, kann man sich auch
noch mit der Hardware beschäftigen wenn man will.
Typisch für den uC Einstieg sind Atmel oder Microchip.
Vom Preis lohnt sich auch TI (LaunchPad).
Grüße
SNR schrieb:> Micha Schweizek schrieb:>> C Programmierung unter Windows für Anfänger behandelt selten die>> Hardwarenahe Programmierung, welche für uC wichtig ist.>> In jedem besseren Buch stehen auch Bitmanipulationen u.ä. drin.> Und dann ist C eben C, ob auf dem uC oder PC.
Dann versuche mal unter Windows ab 2000 den PC internen Lautsprecher
direkt über die Hardware einen Ton zu entlocken, wie es unter Win98 noch
ging, das ist Hardware nah, so bleibt nun nur noch Beep();
Systembits kann man nicht mehr, oder nur sehr schwer direkt manipulieren
unter aktuellen Betriebssystemen, von daher würde es auch kein Author
beschreiben, da keiner was erklärt, was nicht geht.
Was ich damit sagen will ist, das kein Buch mehr beschreibt, wie man
Systemnah Bits und Bytes setzt, da jedes Betriebssystem seine Routinen
dazu liefert, also nicht mehr Systemnah. Was wiederum bei uC der Fall
ist
Micha Schweizek schrieb:> Was ich damit sagen will ist, das kein Buch mehr beschreibt, wie man> Systemnah Bits und Bytes setzt, da jedes Betriebssystem seine Routinen> dazu liefert, also nicht mehr Systemnah.
Um C zu lernen, kann man die Bits auch erst einmal systemfern manipulie-
ren. Es gibt genügend Übungsbeispiele, die man problemlos auf dem PC
programmieren kann, z.B.:
Analyse von IP-Adressen:
http://www2.hs-fulda.de/~klingebiel/c-uebung/ueb08/index.htm
Gewinnstrategie für Nim-Spiel:
http://de.wikipedia.org/wiki/Nim-Spiel
Grafikroutinen (Linien, Kreise, Textzeichen usw.) für Bitmap-Grafiken:
Man baut die Grafik bitweise im Speicher auf und speichert sie zu.
Kontrolle als BMP-Datei ab.
http://de.wikipedia.org/wiki/Windows_Bitmap
Das Erfolgserlebnis ist groß, wenn diese Datei tatsächlich in einen
Imageviewer geladen werden kann und das erwartete Bild angezeigt wird.
...
Und ein C-Buch, das die dazu benötigten Operationen nicht beschreibt,
gehört schlichtweg auf den Müll.
Wenn man das alles kapiert hat, ist das Setzen und Löschen von Bits in
I/O-Registern eines Mikrocontrollers überhaupt nicht mehr magisch. Der
wesentliche Unterschied zu den PC-Variablen besteht darin, dass von den
I/O-"Variablen" Drähte nach außen gehen, was die ganze Sache natürlich
noch etwas spannender macht, aber keinesfalls schwieriger.
Yalu X. schrieb:> Wenn man das alles kapiert hat, ist das Setzen und Löschen von Bits in> I/O-Registern eines Mikrocontrollers überhaupt nicht mehr magisch. Der> wesentliche Unterschied zu den PC-Variablen besteht darin, dass von den> I/O-"Variablen" Drähte nach außen gehen, was die ganze Sache natürlich> noch etwas spannender macht, aber keinesfalls schwieriger.
Danke, so hatte ich das auch gemeint.
Dass der Einstieg auf dem PC geeigneter ist, haben wir ja Einstimmig
festgestellt. Eben aus dem Grund weil man sich um viele Dinge nicht mehr
kümmern muss (Systemlautsprecher über Bits ansteuern), sondern die
fertigen Bibliotheken oder Klassen auf viel höherer Ebene verwenden kann
(und sei es nur dass man die Frequenz und die Dauer angeben kann).
Aber so wie Yalu schon sagte, wenn man mal die Grunddinge wie
Variablendeklaration/definition, Funktionsaufrufe u.ä. Dinge beherrscht
dann ist der Umstieg auf uC (zumindest aus Sicht der reinen
Programierung) nicht mehr schwer.
Grüße
SNR schrieb:> Aber so wie Yalu schon sagte, wenn man mal die Grunddinge wie> Variablendeklaration/definition, Funktionsaufrufe u.ä. Dinge beherrscht> dann ist der Umstieg auf uC (zumindest aus Sicht der reinen> Programierung) nicht mehr schwer.
Ich würde sagen, wünschenswert wäre
* Variablendefinitionen, Datentypen
* zumindest grundlegende Kentnisse in Type-Promotion
* die C Sprachelemente if, while, do - while, for, switch - case
* Funktionen, Argumentpassing, Prototypen
* Arrays
* Strings
* Strukturen
* die wichtigsten Dinge mit dem Präprozessor: #include, #define
* Casting
* Basics in Pointer
* Verständnis dafür, wie eigentlich der Prozess des Compilierens,
Links abläuft bzw. was dabei geschieht - Projektverwaltung
* arithmetische Operationen, boolsche Operationen, logische Operationen
für den Umstieg nicht so wichtig (wenn dann natürlich auch in der
C-Weiterbildung notwendig), die schwierigeren Themen
* dynamische Allokierungen
* komplexere dynamische Datenstrukturen wie Listen, Bäume, Maps, ...
* dynamische Strings
* Files
Wenn der erste Teil so einigermassen sitzt, hat man ein ganz gutes
Grundgerüst, so dass einem auf einem µC C-technisch nichts mehr so
schnell erschüttert oder vor unüberwindliche Probleme stellt. So in etwa
umfasst der erste aufgezählte Teil in einem durchschnittlichen C-Buch so
ca. die erste Buchhälfte.
@Yalu X. und Alle,
Es ging mir im Wesentlichen nicht um das Werkzeug, also das „Wie“,
sondern um das, dass man auch versteht was man später tut. Das wird
nicht beschrieben, daher mein erstes Posting hier, das man sich mit der
Computer Architektur zunächst befassen sollte. Wie man Bits setzt und
löscht kann man sogar locker so verstehen, aber das Warum sollte eine
Rolle spielen.
Der Beste C Programmierer unter Windows, welcher kein Plan hat wie ein
Computer intern funktioniert, wird ohne Rückfragen dazu nicht klar
kommen. Weiter sollte man verstehen, dass nicht alle CPU’s gleich sind,
gerade uC haben einen abgespeckten RISC Befehlssatz, die meisten Bücher
über C, beziehen sich auf die gängigsten Bibliotheken, welche unter
nahezu jedem Betriebssystem tauglich ist, auf dem uC nicht.
Um C als Grundstock zu lernen ist es natürlich OK, aber mit dem Ziel
Systemnah, sollte man zunächst lernen, unabhängig von einer
Programmiersprache, wie ein Computer funktioniert und Unterschiede
kennen lernen.
Was nützen mir Grafikoperationen im Binärbereich, wenn im Buch nur
beschrieben ist, wie ich diese auf ein Win-Canvas zeichne, besser wer,
wenn man sagen könnte (wie damals unter C64 oder AMIGA), ab speicher
Adresse xxx abspeichern.
Daher eben meine Empfehlung, nicht nur die Sprache lernen, sondern
Grundlegend und unabhängig wie eine Computer Architektur aufgebaut ist,
damit man auch weiß, was man da macht, wenn man an Systembits rumspielt.
Im Übrigen habe ich Hunderte kennen gelernt, welche der Überzeugung
waren, wenn ich C lerne, kann ich auch uC programmieren und K.I.T.T
bauen. Persönlich schreibe ich lieber Assembler und bleib im Rahmen des
Befehlssatz des jeweiligen uC.
Daher, wie funktioniert ein 8, 16, 32 Bit Rechner, was ist ein
Befehlssatz, was ist RISC, was wird Unterstützt (läuft fopen() auf
ATmel) etc. etc. etc. PP
Nichts für Ungut, aber nur durch eine Sprache lernt man nicht gleich die
Kultur mit…