mikrocontroller.net

Forum: Compiler & IDEs Wie steige ich in C ein?


Autor: MidasX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Literaturempfehlung:

Kernighan & Ritchie, Programmieren in C, zweite Auflage (!), Hanser
Verlag.

Darin steht alles wissenswerte über C89 / ANSI-C.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MidasX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: MidasX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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?

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches Programm läuft noch nicht?
Nein, das sind nicht alles Compiler, das sind Werkezeuge, die dem
Compiler beiliegen.

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sind Bestandteile bzw. Hilfsprogramme des Compilers (Assembler,
Linker, usw.).

Autor: MidasX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das "Windows Source" läuft nicht aber wenn ich es richtig verstanden
habe schreib ich das Programm im "Programmes Notepade 2" ?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt übrigens auch einen GCC für Win32, und die Unixe bringen
natürlich sowieso ihren GCC mit.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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'.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Abgesehen davon braucht man Makefiles nicht wirklich :)

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Daniel Braun (khani)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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.

Autor: Patrick Dohmen (oldbug) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: JarJar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.