Hallo,
ich bin ein absoluter Einsteiger im Bereich ATMEGA8 und bin noch ein
bißchen überfordert, was die Abgrenzung einiger Begriffe angeht:
Habe ich es richtig verstanden? Die beiden verbreiteten Möglichkieten,
ein Programm zu schreiben sind: AVR Studio und Win AVR? Und beide
greifen auf den Compiler AVR GCC zurück? Heißt das also, dass ich Code,
der in AVR Studio geschrieben wurde, in Win AVR kopieren kann und sofort
(ohne Anpassungen) kompilieren kann?
Ich habe zunächst das Assembler Tutorial gelesen und dann aber auf das
AVR-GCC Tutorial umgeschwenkt, da ich vermute, dass das im 'echten
Leben' eine größere Relevanz hat...?! Oder werden große Projekte auch
schon mal in ASM geschrieben?
Und dann noch meine größte Sorge: Gibt es DIE EINE Sprache C? Oder gibt
es da Dialekte?
Ich habe irgendwie eine Problem beim Erlernen des Programmierens (mir
fehlt da wohl ein Gen). Trotzdem fasziniert es mich und ich versuche mit
Fleiß weiterzukommen. Daher habe ich Sorge, dass ich irgendwie am
falschen Ende/ mit der falschen Sprache/ Toolchain anfange. Mir fehlt
vermutlich der wirkliche Überblick.
So habe ich z.B. ein Paket zur LCD Ansteuerung gefunden, in dem sbi und
cbi noch benutzt werden. Wie ich gelesen habe, ist das nicht mehr
angesagt und so meckert der Compiler auch. Aber wie kann das sein, wenn
es DIE EINE Sprache C gibt?
Oder ein anderes Beispiel, das mich daran zweifeln lässt, dass ich alles
verstanden habe: Wenn ich den Kernighan/Ritchie aufschlage, lese ich von
Variablen vom Typ int. Wenn ich mich in den AVR GCC Tutorials umgucke,
tauchen dann Dinge wie
'unsigned int i;' oder
'typedef signed char int8_t;'
'typedef unsigned char uint8_t;'
'typedef short int16_t;'
'typedef unsigned short uint16_t;'
auf. Naja und wenn dann Pointer auftauchen, dann wird es sowieso
unheimlich. Ich vermute, dass das Zeiger sind, wenn * im Code
auftauchen...?
Ihr seht, ich stehe auf dem Schlauch und bin daher dankbar für jeden
kleinen Stoß in die richtige Richtung :-)
Danke
Peter
Peter Mueller wrote:
> Habe ich es richtig verstanden? Die beiden verbreiteten Möglichkieten,> ein Programm zu schreiben sind: AVR Studio und Win AVR? Und beide> greifen auf den Compiler AVR GCC zurück? Heißt das also, dass ich Code,> der in AVR Studio geschrieben wurde, in Win AVR kopieren kann und sofort> (ohne Anpassungen) kompilieren kann?AVR Studio alleine => Assembler
WinAVR alleine => C (oder Assembler für Hardcore-Leute)
AVR Studio + WinAVR => C oder Assenbler
Codeaustausch zwischen AVR Studio+WinAVR und WinAVR alleine ist möglich.
In WinAVR alleine brauchst du u.U. ein angepasstes Makefile. Die
Erstellung des Makefile nimmt dir AVR Studio ab.
> Ich habe zunächst das Assembler Tutorial gelesen und dann aber auf das> AVR-GCC Tutorial umgeschwenkt, da ich vermute, dass das im 'echten> Leben' eine größere Relevanz hat...?! Oder werden große Projekte auch> schon mal in ASM geschrieben?
Bei manchen µC geht es sogar nur in ASM. Das sind die keinen AVRs, die
keinen SRAM haben. Man sagt, Kenntnisse in ASM erleichtern das
Verständnis, was auf der untersten Hardwareebene abgeht.
> Und dann noch meine größte Sorge: Gibt es DIE EINE Sprache C? Oder gibt> es da Dialekte?
Es gibt einen Standard und µC spezifische und Compilerbauer-spezifische
Erweiterungen. Die erlernt man aber relativ rasch.
> Ich habe irgendwie eine Problem beim Erlernen des Programmierens (mir> fehlt da wohl ein Gen). Trotzdem fasziniert es mich und ich versuche mit> Fleiß weiterzukommen. Daher habe ich Sorge, dass ich irgendwie am> falschen Ende/ mit der falschen Sprache/ Toolchain anfange. Mir fehlt> vermutlich der wirkliche Überblick.
Die erste Programmiersprache ist die schwierigste. Wenn du das Konzept
einmal begriffen hast, ist das Umlernen einfach. Man sagt gelegentlich,
ein Programmierer sollte alle x Jahre eine neue Sprache lernen, um fit
zu bleiben ;-)
> So habe ich z.B. ein Paket zur LCD Ansteuerung gefunden, in dem sbi und> cbi noch benutzt werden. Wie ich gelesen habe, ist das nicht mehr> angesagt und so meckert der Compiler auch. Aber wie kann das sein, wenn> es DIE EINE Sprache C gibt?
s. oben. Das sind Erweiterungen. Die wechseln von µC-Familie zu
µC-Familie und mit der Zeit sogar innerhalb einer µC-Familie, weil es
besseres gibt.
> Oder ein anderes Beispiel, das mich daran zweifeln lässt, dass ich alles> verstanden habe: Wenn ich den Kernighan/Ritchie aufschlage, lese ich von> Variablen vom Typ int. Wenn ich mich in den AVR GCC Tutorials umgucke,> tauchen dann Dinge wie>> 'unsigned int i;' oder>> 'typedef signed char int8_t;'> 'typedef unsigned char uint8_t;'>> 'typedef short int16_t;'> 'typedef unsigned short uint16_t;'>> auf. Naja und wenn dann Pointer auftauchen, dann wird es sowieso> unheimlich. Ich vermute, dass das Zeiger sind, wenn * im Code> auftauchen...?
Peanuts. Das lernst du einmal, was dahinter steckt und dann geht das in
Fleisch und Blut über.
Peter Mueller wrote:
> ich bin ein absoluter Einsteiger im Bereich ATMEGA8 und bin noch ein> bißchen überfordert, was die Abgrenzung einiger Begriffe angeht:
Willkommen in unserer kleinen, verrückten Welt :)
> Habe ich es richtig verstanden? Die beiden verbreiteten Möglichkieten,> ein Programm zu schreiben sind: AVR Studio und Win AVR? Und beide> greifen auf den Compiler AVR GCC zurück? Heißt das also, dass ich Code,> der in AVR Studio geschrieben wurde, in Win AVR kopieren kann und sofort> (ohne Anpassungen) kompilieren kann?
Theoretisch: Ja! Praktisch kann es da einige Ecken geben, die
Programmspezifisch sind, und an denen sich der eine Texteditor stört,
der andere aber nicht. Generell kannst du zum Schreiben des Codes
natuerlich auch Wordpad verwenden, aber das wuerde jetzt den Rahmen
sprengen.
> Ich habe zunächst das Assembler Tutorial gelesen und dann aber auf das> AVR-GCC Tutorial umgeschwenkt, da ich vermute, dass das im 'echten> Leben' eine größere Relevanz hat...?! Oder werden große Projekte auch> schon mal in ASM geschrieben?
Vermutlich nicht, wird zu unübersichtlich. Assembler nutzt man gerne im
C eingebettet, um spezielle Registervorgänge zu machen (PUSH&POP zB)
> Und dann noch meine größte Sorge: Gibt es DIE EINE Sprache C? Oder gibt> es da Dialekte?
Hehe, nein. Es gibt C, kein bayrisch-C, oder plattdeutsch-C oder
sächsisch-C... keine Angst... Oder anders gesagt: mir sind keine
Abnormitäten von C bekannt (von C# mal abgesehen), lasse mich aber gerne
eines Besseren belehren :)
> Ich habe irgendwie eine Problem beim Erlernen des Programmierens (mir> fehlt da wohl ein Gen). Trotzdem fasziniert es mich und ich versuche mit> Fleiß weiterzukommen. Daher habe ich Sorge, dass ich irgendwie am> falschen Ende/ mit der falschen Sprache/ Toolchain anfange. Mir fehlt> vermutlich der wirkliche Überblick.
Nein, das ist am Anfang normal. Sich damit auseinanderzusetzen, wie die
Toolchains funktionieren, ist sehr sinnvoll, wenn auch zu Beginn
vielleicht wirklich viel Input. Controllerprogrammierung erfolgt sehr
viel in C, also hast du dir schonmal nicht die falsche Sprache
ausgesucht, und AVR Studio und WinAVR sind sehr beliebte
Entwicklungsumgebungen, fuer die du auch sehr viel support in den Weiten
des Internet finden kannst/wirst.
> Oder ein anderes Beispiel, das mich daran zweifeln lässt, dass ich alles> verstanden habe: Wenn ich den Kernighan/Ritchie aufschlage, lese ich von> Variablen vom Typ int. Wenn ich mich in den AVR GCC Tutorials umgucke,> tauchen dann Dinge wie>> 'unsigned int i;' oder>> 'typedef signed char int8_t;'> 'typedef unsigned char uint8_t;'>> 'typedef short int16_t;'> 'typedef unsigned short uint16_t;'
Das liegt daran, dass C auf sehr vielen Plattformen einsetzbar ist. Der
Datentyp "int" ist zB nicht immer 32 Bit, auf 64Bit Processoren ist er
nämlich 64 Bit lang. Um aber einen genauen überblick zu behalten, hat
man sich das so ausgedacht. int8_t ist dann immer 8 bit lang, egal auf
welche Maschine. Je nach Prozessor variieren diese "typedef", also
Typdendefinitionen. und das u vorweg beschreibt das "unsigned". Das
wiederrum sagt dir, ob die Variable vorzeichenbehaftet ist oder nicht.
Bei vorzeichenbehafteten Datentypen (signed) ist das MSB (most
significant Bit), also das höchstwertige bit das Vorzeichen, wobei 0=
Plus und 1=minus. 1111|1111 ist dann entweder 255 (unsigned) oder -127
(signed), wenn ichs jetzt richtig zusammenbekomme ausm Kopf. Die genaue
Laenge einer Variable ist auf uControllern teils sehr wichtig, zB auf
kleinen ATTinys mit sehr wenig RAM wärs blöde, aus Gewohnheit immer
32Bit Variablen anzulegen, obwohl 8Bit ausreichen würden. Bei
Bitmanipulation generell ist die genaue Länge unabdingbar.
> auf. Naja und wenn dann Pointer auftauchen, dann wird es sowieso> unheimlich. Ich vermute, dass das Zeiger sind, wenn * im Code> auftauchen...?
Ja. Dazu musst du das stack prinzip verstehen. Jede Variable ist an
einer bestimmten Addresse anzufinden, und ein Pointer zeigt auf diese
Addresse. Wenn man einen Pointer auf eine Addresse setzt, kann man den
Inhalt dieser Addresse auslesen oder auch manipulieren. Pointer sind
aber ein großes Thema fuer sich, dass du in einschlägiger Fachliteratur
nachlesen solltest, möglichst in der C-Bibel "The C programming
language", dass von den C-"Erfindern" verfasst ist.
> Ihr seht, ich stehe auf dem Schlauch und bin daher dankbar für jeden> kleinen Stoß in die richtige Richtung :-)>> Danke> Peter
Ich hoffe, ich konnte etwas helfen
Peter Mueller schrob:
> Hallo,>> ich bin ein absoluter Einsteiger im Bereich ATMEGA8 und bin noch ein> bißchen überfordert, was die Abgrenzung einiger Begriffe angeht:>> Habe ich es richtig verstanden? Die beiden verbreiteten Möglichkieten,> ein Programm zu schreiben sind: AVR Studio und Win AVR? Und beide> greifen auf den Compiler AVR GCC zurück? Heißt das also, dass ich Code,> der in AVR Studio geschrieben wurde, in Win AVR kopieren kann und sofort> (ohne Anpassungen) kompilieren kann?
AStudio kannst du betrachten als einen besserer Editor ;-) Du kannst
dort die Programme schreiben und von dort aus übersetzen, es zeigt dir
Fehlermeldungen an, verwaltet Projekte, ermöglicht Registeranzeigen beim
Debuggen, vereinfacht den Build-Prozess, ...
Aber ein C-Programm kannst du auch mit einem Allerweltseditor wie
TextPad schreiben.
ASTudio greift auf die Toolchain zurück: Compiler (avr-gcc), Assembler
(avr-as) Linker (avr-ld), Tool zum Disassemblieren (avr-objdump) und
anzeigen von Infos (avr-nm, avr-size) und um Formate ineinander
umzuwandeln (avr-objcopy), ...
All dieses Zeug kannst du aber auch von Hand aufrufen. Für den Anfang
ist das vielleicht sogar besser um zu verstehen, wie ein normaler
Compilelauf funktioniert.
gib einfach auf der Kommandozeile ein
avr-gcc
und er meckert "no input files", weil er gerne ne Quelldatei hätte zum
verdauen.
> Ich habe zunächst das Assembler Tutorial gelesen und dann aber auf das> AVR-GCC Tutorial umgeschwenkt, da ich vermute, dass das im 'echten> Leben' eine größere Relevanz hat...?! Oder werden große Projekte auch> schon mal in ASM geschrieben?
Heute nicht mehr, zumindest nicht im professionellen Bereich. Da wird
C/C++ eingesetzt, Ada, Java, ... letztere aber kaum auf AVR.
> Und dann noch meine größte Sorge: Gibt es DIE EINE Sprache C? Oder gibt> es da Dialekte?
Ja. Aber es gibt Standarts, zB ISO-C89, C99, GNU-C99, ...
> Ich habe irgendwie eine Problem beim Erlernen des Programmierens (mir> fehlt da wohl ein Gen). Trotzdem fasziniert es mich und ich versuche mit> Fleiß weiterzukommen. Daher habe ich Sorge, dass ich irgendwie am> falschen Ende/ mit der falschen Sprache/ Toolchain anfange. Mir fehlt> vermutlich der wirkliche Überblick.
Das kommt. gcc gibt's auch für deinen PC, da funktioniert alles
prinzipiell genauso, nur daß es etwas bequemer ist: Man kann Ausgaben
machen, braucht kein Programm zu brenne, kann einfacher Debuggen,
braucht sich keine Sorgen um Speicherplatz zu machen, ... Am simpelsten
bekommst du nen gcc mit nre IDE wie Code::Blocks. (Musst ihn aber, wie
bei AStudio, nicht gezwungenermassen von der IDE aus benutzen).
> So habe ich z.B. ein Paket zur LCD Ansteuerung gefunden, in dem sbi und> cbi noch benutzt werden. Wie ich gelesen habe, ist das nicht mehr> angesagt und so meckert der Compiler auch. Aber wie kann das sein, wenn> es DIE EINE Sprache C gibt?
sbi und cbi gehörten noch nie zum Sprachumfang von C.
> Oder ein anderes Beispiel, das mich daran zweifeln lässt, dass ich alles> verstanden habe: Wenn ich den Kernighan/Ritchie aufschlage, lese ich von> Variablen vom Typ int. Wenn ich mich in den AVR GCC Tutorials umgucke,> tauchen dann Dinge wie> 'unsigned int i;' oder>> 'typedef signed char int8_t;'> 'typedef unsigned char uint8_t;'>> 'typedef short int16_t;'> 'typedef unsigned short uint16_t;'
Programmierer sind tippfaul. Am faulsten sind Linuxprogrammierer. Die
definieren sich ein u8 damit sie nicht das endlos lange uint8_t
eintippen müssen. Wenn C Bezeichner der Länge Null zulassen würde,
würden sie den auch verwenden...
> auf. Naja und wenn dann Pointer auftauchen, dann wird es sowieso> unheimlich. Ich vermute, dass das Zeiger sind, wenn * im Code> auftauchen...?
Kann auch ein Produkt sein: c = a * b
Aber eins nach dem anderen...Und nicht das Buch von hinten anfangen zu
lesen. Sonst ist die ganze Spannung weg, ob's der Gärtner war oder nicht
;-)
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.