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 ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.