Hallo Ich kann zwar mehr oder weniger gut Assembler programmieren. Doch jetzt will ich in C einsteigen. Trotz langen suchen im Forum habe ich vermutlich viele Dinge nicht richtig oder gar nicht begriffen. Was ist der Unteschiede von ?: _WinAVR (Habe ich jetzt installiert) _AVR GCC Welcher C Compiler wird allgemein verwendet wenn man vorerste keinen kaufen will und was ist der Nachteil davon ? Gruss Midas X
Hallo Midas, WinAVR enthält einen GCC-Compiler für AVRs. Der ist frei erhältlich und das ist der erste und größte Vorteil. Wenn Du noch nicht so viel C kannst, dann lade Dir aber erst vielleicht noch einen Compiler für Dein Betriebssystem (welches wahrscheinlich aus dem Hause Winzigweich stammt) herunter. Da gibt es ebenfalls freie Compiler (zusammen mit Bloodshed zum Beispiel). Dann kannst Du Dir noch ein Buch zum Thema reinziehen - wenn Du noch nicht zu viel C kannst, wärst Du damit gut beraten und dann Deine neu erworbenen Kenntnisse auf den Mikrocontroller anwenden. Ich persönlich bin der Meinung, dass gewisse fortgeschrittene Kenntnisse im C-Programmieren den Umgang mit den Mikrocontrollern massiv vereinfachen. Wenn man schon mal auf dem PC Erfahrungen gesammelt hat, wo die Fehler sich meist verstecken, dann kann man bei Mikrocontroller viel gezielter danach suchen (und die Fehler auch finden). Auf dem PC ist es nämlich viel einfacher, mal ein paar zusätzliche printf()'s einzubauen um auch wirklich alles zu sehen. Ganz davon abgesehen kann man auf dem PC die Hardware oft als Fehlerquelle ausschließen und die Wartezeit bis zum Test ist nicht so lange (kein Programmieren von irgendwelchen Devices nötig). MfG, Daniel
Literaturempfehlung: Kernighan & Ritchie, Programmieren in C, zweite Auflage (!), Hanser Verlag. Darin steht alles wissenswerte über C89 / ANSI-C.
Der 'avr-gcc' ist Bestandteil der Werkzeugsammlung 'WinAVR'. 'WinAVR' ist DAS Paket mit dem man seine Programme in C oder auch C++ (bald sogar ADA), ..., schreiben und einen 'freien' Compiler einsetzen möchte.
Hallo Daniel Braun Danke mal für die Antwort. Also C++ auf dem PC kann ich bin aber nicht sehr geübt. Deshalb nehme ich an dass dies fürs reine programmieren reichen müsste. Es ist natürlich klar dass die Sache für Microcontroller einiges anders aussieht. Irgendwie habe ich was mit dem Patch für den WinAVR missverstanden. Für was soll dieser genau sein?
@Patrick Dohmen (OldBug) Im Moment läuft das Programm noch nicht. Weiss zwar noch nicht warum muss dass noch nachlesen. Was mich erstaunt sind die vielen EXE-Dateien im "Bin" Verzeicnis. Sind das alles Compiler und wenn ja was für welche?
Welches Programm läuft noch nicht? Nein, das sind nicht alles Compiler, das sind Werkezeuge, die dem Compiler beiliegen.
Das sind Bestandteile bzw. Hilfsprogramme des Compilers (Assembler, Linker, usw.).
Das "Windows Source" läuft nicht aber wenn ich es richtig verstanden habe schreib ich das Programm im "Programmes Notepade 2" ?
Also ich würde erstmal mit C überhaupt warm werden, d.h. einen C-Compiler aufm PC benutzen. Aber nicht so ein Windows-Mega-Monster (Visual C++), sondern irgendein altes Turbo-C oder Borland-C in der DOS-Box. Da kann man nämlich ganz easy Eingaben per kbhit() / getchar() machen und Ausgaben per puts() / printf() ohne erstmal eine Monster-Megabyte große Windows Oberfläche programmieren zu müssen. Falls es mit Deinem Englisch nicht so gut steht, dann die Version mit der deutschen Hilfe nehmen. Ich benutze Borland C++ Version 3.1 in der DOS-Version auch als Editor für meine AVR-Quellen. Compilieren kann man damit natürlich nicht, das mache ich mit einer Batch-Datei. D.h. compilieren kann man schon Sachen, wenn man Hardwarezugriffe ausklammert. Wenn man also unsicher ist, ob Funktionen richtig arbeiten, z.B. Schleifenzähler richtig laufen, dann kann man damit durchsteppen und sich die einzelnen Variablen anzeigen lassen. Statt Ports nimmt man dann z.B. char-Variablen. Peter
Es gibt übrigens auch einen GCC für Win32, und die Unixe bringen natürlich sowieso ihren GCC mit.
...und der GCC für Windows funktioniert ganz hervorragend! Großer Vorteil gegenüber anderen Compilern: man kann auf beiden Systemen (PC/avr) den gleichen Compiler verwenden.
Man sollte bloß beim Gebrauch des GCC auch als C-Compiler vorsichtig sein, das ist nämlich einer der wenigen Compiler, der C99 implementiert. Dafür geschriebene Programme lassen sich von anderen C-Compilern, die das deutlich verbreitere ANSI-C (C89/C90) implementieren, nicht ohne Probleme übersetzen. Auch ist vielen GCC-Portierungen die Herkunft deutlichst anzusehen; die -IMHO fehlerhafte- Angewohnheit, auch unter Windows die Groß- und Kleinschreibung von Dateinamen auszuwerten. blafusel.c wird anders übersetzt als blafusel.C. Spaßig wird's, wenn man versucht, unter Windows solche Dateien umzubenennen. Diese Fallstricke gibt es beim Gebrauch von GCC unter Windows zu beachten. Wer sich nicht eine vollständige Linux-Runtime-Umgebung mit zig MB Größe installieren will (cygwin), sollte sich mingw ansehen.
Wegen der Problematik C89/C99/...: Es gibt einen Kommandozeilenschalter, mit dem man dem Compiler sagen kann, welchen Standard er unterstüzt. -std=c89 -std=c99 -std=xYz Siehe gcc-Infopages, Kapitel 'Standards'.
Andererseits stört die Gewöhnung an die C99-Features ja nicht, wenn man vom {Unix,Windows}-GCC auf den AVR-GCC umschwenken will, da der das ja ebenfalls in gleichem Maße implementiert. (Der IAR hat übrigens eine m. E. vollständige C99-Implementierung, selbst wide chars sind da, allerdings ist _Pragma() nun ja, ein wenig buggy.) Manche der C99-Sachen sind ja nicht schlecht.
Man sollte sich aber recht früh auch mit Header Files, dem Präprozessor und bei den GCC auch mit Makefiles vertraut machen. Gerade wenn man sowas von anderen Sprachen nicht gewöhnt ist tut man sich damit am Anfang etwas schwer. So ging es mir zumindest. In den meißten Büchern die ich gelesen hab werden diese Themen doch rechst spät, unzureichend und teilweise gar nicht behandelt. Die Sprache selbst ist da eigentlich das kleinere Problem weil alle Sprachen mehr oder weniger die gleichen Sachen bieten wie Variablen, bedingte Verzweigungen und Vergleiche. Man muß eigentlich nur die neue Schreibweise und die Eigenheiten lernen. Jetzt nicht gleich wieder schimpfen. Ich weiß selbst das es teilweise recht große Unterschiede gibt, aber die Grundlage der meißten Sprachen ist doch recht ähnlich. Was mich an C, und insbesondere an den GCC, am meisten gestört hat waren die Makefiles. Ich hab ne Weile gebraucht um zu verstehen was das soll. Mittlerweile frage ich mich selber wo die Schwierigkeit war
Ja, ok. Man kann auch ein Script schreiben oder direkt auf der Kommandozeile rumtanzen. Aber wenn es schon so ein nettes Tool wie mfile.exe für WinAVR gibt kann man das auch verwenden. Zumal in dem Makefile auch gleich noch alles für avrdude usw drin ist. Man muß nur einmal kapieren was das soll und wie es funzt, dann is ja auch alles gut ;)
Pfui Patrick :-), gerade von Dir hätte ich wenig mehr Lob, Ruhm und Ehre für Makefiles bzw. das make-Tool erwartet. Nur mal zur allgemeinen Erläuterung : das Programm "make" ist nicht nur so etwas wie ein deluxe-Batchfile-Abarbeiter, sondern bietet dem Entwickler viele wichtige Funktionen. Zum Beispiel kann man gewisse Regeln festlegen, nach denen dann make verschiedene Aufgaben durchführen soll. Außerdem erzeugt make nur die Dateien neu, die es auch nötig haben. Und noch vieles mehr ... Natürlich kann man das alles auch von Hand eintippen oder mit einem Batchfile lösen, das ist aber in vielen Fällen etwas aufwändig (vor allem, wenn die Projekte etwas größer werden). Wenn man erst mal weiß, wie man makefiles versteht und erstellt, dann erschließen sich einem sher viele interessante Anwendungsfelder (ich habe auch schon für große tex-Dateien mit vielen Bilderchen makefiles erstellt - eher so zum Spaß). MfG, Daniel.
So, soweit hab ich das mittlerweile auch verstanden. Nur bis ich das alles praktisch umsetzen kann wirds noch ein paar Tage dauern ;) Wie gesagt, grad Makefiles werden in Tutorials und Büchern meist vernachlässigt oder gar nicht erwähnt. Ist halt der Vorteil von ner richtigen IDE. Da braucht man sich um sowas nicht zu kümmern
> Ist halt der Vorteil von ner richtigen IDE. Da braucht man sich um > sowas nicht zu kümmern Oder der Nachteil: was geht, geht, was nicht geht, kann man nie zum Laufen bringen damit.
Oh, da hab ich mich wohl ein wenig ungünstig ausgedrückt! Ich wollte schon, daß man das als Lob wahrnimmt. Das beste an den Tools rund um den GCC ist, meiner Meinung nach, daß es sehr viele Tools gibt, die man aber nicht zwingend benötigt. Schreibt jemand ein anderes Tool, das diese Aufgabe auch übernehmen kann, so kann man eben dieses Tool verwenden. Und das geht bei vielen kommerziellen IDEs überhaupt nicht.
Naja, bei meinen bisherigen IDE's bin ich noch nicht an die Grenze des Machbaren gestoßen, aber stimmt schon. man ist auf das angewiesen was man bekommt
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.