Hallo,
ist es emfehlenswert mit C Abzufangen wenn man den Assembler nicht gut
blickt? Wenn ja kann man gleich mit C Anfangen oder soll man erst BAsic
lernen? Habe mal ein wenig mit GFA-Basic rumexperimentiert!
Danke schonmal.
Peter
Hallo Peter,
Basic ist sehr schön, aber wenn mal irgendwas nicht implementiert ist
(im Compiler) entsteht sehr schnell ein furchtbar unübersichtlicher
Code, und C zu lernen ist nicht schwieriger als irgendeine andere
Programmiersprache. C ist hochgradig portabel, Basic in der Regel
überhaupt nicht. Alle Welt spricht C, Basic ist immer
Implementierungssache. Meine Erfahrung (und die vieler anderer) ist: mit
C gehts immer noch am besten, und viele können helfen. Für die AVRs
scheint mir WINAVR das Ding schlechthin zu sein. Allerdings solltest Du
dich schon ein bischen mit dem Assembler auskennen, hilft manchmal um
Missverständnisse zwischen Dir und dem Compiler zu entdecken wenn man
sich das Compilat anschaut. Besorg Dir Kernighan, Ritchie:
"Programmieren in C", da steht alles drin, was man braucht.
Hoffe das hilft Dir
Berndt
Hallo Peter,
ich kann Berndt nur zustimmen. Vergiß alles und nimm C !!
Ich kann Dir aus Erfahrung sagen, daß man den Assembler-Code nicht mehr
vollständig verstehen muß. Die 8051-Controller konnte ich damals noch
komplett in Assembler programmieren, aber die neuen viel
leistungsfähigeren Controller wie z.B. die C167'er von Intel haben
bereits einen so umfangreichen Befehlssatz, daß es fast unmöglich ist
fehlerfreie Programme oder sogar kürzere Programme als das Compilat zu
entwickeln. Ich gehe daher so vor, daß ich ausschließlich C programmiere
und mir immer .LST-Files generieren lasse. Die kann ich mir dann ansehen
und "interpretieren". Das geht, wenn man grundsätzlich weiß, wie
Assembler im Durchschnitt aussieht ganz gut, obwohl man den genauen
Befehlssatz nicht komplett kennt. Damit kann man immerhin beurteilen, ob
der C-Code effektiv ist oder nicht. Auch muß man nicht für jeden Befehl
wissen, ob er nun das Carry-bit beeinflusst oder nicht. Aber das
brauchst Du eigentlich nur machen, wenn Du zeitkritische Funktionen
entwickelst, für kleinere Programme ist das alles völlig egal. Der
Vorteil von C ist jedenfalls, daß du den Code ohne größeren Auffwand auf
jedem anderen Rechner laufen lassen kanst, wenn Du den entsprechenden
Compiler besitzt. Von allen anderen Programmiersprachen, insbesondere
Basic, kann ich nur abraten. Das ist was für Warmduscher. Und wenn Du
dann irgendwann in ANSI-C fit bist und die ersten objektorientierten
Programm in C++ schreibst, wirst Du feststellen, daß diese Möglichkeiten
andere Programmiersprache überhaupt nicht hergeben.
Also mach keine falschen Fehler.
Markus
Da kann ich Markus nur zustimmen.
Basic ist so, wie mit Bauklötzern zu spielen. es geht schnell
irgendwelche Standardsachen zu machen. Aber sobald ein Bauklotz nicht
mehr paßt, stehst Du voll auf dem Schlauch.
Z.B. wenn Du ein LCD nicht mit 11 sondern nur mit 3 Drähten ansteuern
willst.
Bei C nehme ich auch grundsätzlich nur die Standardbibliotheken (math.h,
stdio.h, stdlib.h, string.h usw.).
Z.B. LCD, I2C, 1-Wire ist zu stark von dem konkreten Projekt abhängig
(AVR-Typ, Pinbelegung, CPU-Takt), als das man dafür einigermaßen
funktionssichere Bibliotheken hinkriegt.
Im eigenen Code kann man die Fehler wenigstens suchen und man weiß,
welche Resourcen belegt werden (z.B. auch max / min
Interruptlatenzzeit).
Peter
Nu ja, C ist keine für Anfänger besonders gut geeignete Sprache.
Die Syntax ist teilweise nicht ganz simpel zu verstehen. Pascal
ist eher geeignet, ein Gefühl für eine (prozedurale, nicht
objektorientierte) Hochsprache zu erlangen.
BASIC zählt schlicht gar nicht als Hochsprache. :)
Objektorientierung auf einem Micro sollte man nur angehen, wenn
man wirklich ein gutes Verständnis für all die internen
Zusammenhänge hat. Bis dahin sollte insbesondere für einen
Anfänger C++ tabu sein. Man kann sich damit verdammt schnell
ins Knie schießen (besonders was den Ressourcenverbrauch
anbelangt).
Obwohl ich alles andere als ein Gegner von Hochsprachprogrammierung
für Microcontroller bin: ein grundlegendes Verständnis für
die Maschine und deren Assembler sollte man besitzen. Das
muß nicht unbedingt so weit gehen, daß man selbst freihändig
ein Assemblerprogramm zusammenbekommt, aber man sollte sich
schon in der Anfangsphase häufiger mal ansehen, was der Compiler
so aus dem Programm tut. Dazu bedarf es übrigens nicht
unbedingt eines Listings, avr-gcc ... -S übersetzt direkt
in den Assemblercode (Dateiendung .s).
Hallo,
Danke schon mal für eure ausfürlichen Antworten! Wie gesagt ich verstehe
auch ein wenig Assembler. Mit C++ will ich ja auch gar nicht schaffen
sondern mit dem normalen C. Mein Bruder hat mir ja gesagt das C++
praktisch nur ein paar mehr befehle und die anderen vieleicht ein
kleinwenig verändert sind. Für weitere Tips wäre ich dankbar.
Peter
Oh, da hat Dein Bruder aber offensichtlich absolut keine Ahnung von
C++...
Von der Komplexität her ist C++ einige Grössenordnungen von C entfernt,
im Gegensatz zu C ist es da mit Syntay-Lernen nicht getan. C lernt man
an einem Tag, wenn man das will, C++ lernt ein erfahrener Programmierer
vielleicht in einem Jahr Vollzeit...
Hallo,
Wo lernt man den zumindesten halbwegs C in einem Tag oder Nacht? Habe
noch kein gutes Touterial gesehen das wirklich von ganz Anfang an
Anfängt. Werde mal schauen das ich das "Programmieren in C" ind er
Bücherrei bekomme.
Hat sonst noch jemand einen guten vorschlag was Bücher oder
internetseiten angeht?
DAnke schon mal für eure gute und schnelle Hilfe.
Peter
PS. Vitamin C nehme ich schon die ganze Zeit aber kann immer noch nicht
C reichen den da nicht 10 hochdosierte Tabeletten:)
hier das erste oben im link. ist wohl schlecht hin das beste
http://www.mikrocontroller.net/buecher.htm
dass man c an einem tag lernen kann halte ich für ein gerücht. da es
auch viele abstrakte sachen gibt die man mit sicherheit auch an zwei
oder drei tagen nicht lernen kann.
das meiste lernt man aus erfahrung. bücher zeigen meist nur die
grundfunktionen. obwohl in dem oben ganannten buch auch tiefer in die
materie eingangen wird.
gruss,
BAB
Ich hatte auch von einem erfahrenen Programmierer gesprochen.
Und C hat nunmal keinen hohen Abstraktionsgrad, so dass ein erfahrener
Programmierer da auch auf nichts Neues stösst!
In C++ ist das hingegen völlig anders.
Hallo,
ich habe mich jetzt entschieden mit C anzufangen. Und jetzt kommt schon
meine erste Frage wie bekomme ich aus UltraEdit-32 ein file raus des ich
mit Ponyprog brennen kann?
Peter