PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : suche guten C-Compiler



Zeroeightfifteen
02.11.2006, 20:27
Hallo

ich bin gerade am Anfang mit dem C lernen. Nun suche ich einen guten Compiler um Megas zu programmieren. welchen Compiler verwendet ihr?

Cluni
02.11.2006, 20:39
Ich benutze den GCC - in Zusammenhang mit WinAVR!

Gruß, Bernd

BlooD
02.11.2006, 20:41
ich auch - aber im avr-studio wegen der simulation

Cluni
02.11.2006, 20:44
Ja gut - benutze es auch in Zusammenhang mit dem Studio, aber nicht wegen der Simulation sondern wegen der ICE! ;)

Das Studio hat aber so sonst nix mit dem C-Compiler zu tun - ist halt nur ein Plugin drin, damit man den C-Code debuggen/simulieren kann...

BlooD
02.11.2006, 20:59
Ich dachte es ist sinnvoll zu erwähnen das dies im AVRStudio geht, weil er schreibt, das er gerade erst anfängt...
Die Simulation hat mir schon oft geholfen und viel Zeit gespart.

Und da ich eigentlich auch noch nicht so lange dabei bin: Was ist ICE?

Zeroeightfifteen
02.11.2006, 21:11
ich wollte aber nicht mehrere compiler verwenden sondern mich auf einen spezialisieren. mit winavr kommi ich überhaupt nicht zurecht.

Cluni
02.11.2006, 21:17
@BlooD: Da hast du schon recht, dass das mit dem AVR-Studio Zeit sparen kann. Nur ist das mit dem AVR-Studio ja zusätzlich und dafür muss das Makefile im WinAVR richtig konfiguriert sein (das richtige Debug-Format). Das heisst: Nur, wenn man WinAVR schon einigermaßen beherrscht, dann sollte man meiner Meinung nach erst den nächsten Schritt tun und sich das anschauen, wie das mit der Simulation bzw. dem Debuggen geht.

ICE heisst In-Circuit Emulator und ermöglicht das debuggen über die JTAG-Schnittstelle (haben die größeren ATmegas - ATmega16, ATmega32, ATmega128,...). Das hat den Vorteil, dass man nicht nur simuliert, sondern sich die Zustände am "lebenden" Objekt ansehen kann. Mann kann z.B. Breakpoints setzen und der µController hält dann an dieser Stelle an.

@Zeroeightfifteen: WinAvr ist auf den ersten Blick etwas kompliziert. der Eindruck täuscht aber. Wenn man es sich ein wenig näher ansieht, dann wird man es aber schnell lieben und schätzen! Schau dir das Tutorium mal an: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Gruß, Bernd

Felix G
02.11.2006, 21:27
Auf einen Compiler spezialisieren?

Mag sein, daß sich die diversen Varianten in der Bedienung unterscheiden, aber C bleibt C, und jeder C-Compiler muss den Code korrekt übersetzen können. Unterschiede gibt es allenfalls bei Dingen die nicht Bestandteil der Programmiersprache C sind, also z.B. die Definition von Interrupt Service Routinen. Und natürlich kann auch die Qualität des erzeugten Maschinencodes variieren.

Ich nutze auch den GCC-Compiler (mit WinAVR), und bin rundum zufrieden damit.


Falls dir WinAVR zu unbequem ist, solltest du den GCC vielleicht in Kombination mit Atmels AVR-Studio verwenden. Da hast du dann eine schöne IDE, und kannst deine Programme fast so entwickeln wie für den PC.



Und da ich eigentlich auch noch nicht so lange dabei bin: Was ist ICE?In-Circuit-Emulator
mit einem ICE kann man seine Programme debuggen, während sie auf der Hardware laufen. (man hat also Zugriff auf sämtliche Register des Controllers, kann Breakpoints setzen, das Programm Schritt für Schritt durchgehen... naja, debuggen eben)

Zeroeightfifteen
02.11.2006, 22:03
kann ich auch compiler kombinieren. oder wie ist das gemeint dass ich GCC mit Atmels AVR-studio kombiniere?

Felix G
02.11.2006, 22:41
GCC ist ein Compiler, das AVR-Studio ist eine Entwicklungsumgebung (ohne eigenen C-Compiler)
Das AVR-Studio bietet aber seit einiger Zeit auch Unterstützung für den GCC, so daß es also auch für die Entwicklung von C-Programmen genutzt werden kann.

WinAVR ist übrigens ebenfalls kein Compiler, sondern nur eine Ansammlung von Programmen für den GCC. (also prinzipiell auch eine Entwicklungsumgebung)


Wer es möchte kann den GCC auch "roh" verwenden, ganz ohne irgendwelche Zusatzprogramme. Man schreibt einfach sein Programm und ruft den Compiler dann mit den passenden Kommandozeilenargumenten auf (Namen der Quelldateien etc.). Bequemer ist allerdings die Verwendung des Programms "make", das (ein korrektes Makefile vorausgesetzt) einem diese Arbeit abnehmen kann.

SprinterSB
03.11.2006, 10:07
@Zeroeightfifteen

Versuch doch einfach mal den avr-gcc (https://www.roboternetz.de/wissen/index.php/Avr-gcc) bzw. WinAVR. Die sind freie Software und du vertust dir nix, wenn er dir nicht zusagt. Zudem kannst du den wie gesagt mit verschiedenen Oberflächen verwenden und bist unabhängig vom Betriebssystem (sowohl was Compiler als auch was Progger (avrdude) angeht).

Andere AVR-C-Compiler (Keil, IAR, ...) liegen jenseits der Portokasse und sind teilweise selbst für kleine Firmen unbezahlbar.

avr-gcc compiliert Standard-C. Wenn du später auf einen anderen Compiler umsteigen willst, kannst du deine Quellen mit kleinem Aufwand dorthin mitnehmen -- vorausgesetzt, der neue Compiler ist selber auch kein Sonderlocken-C. Arbeit machen Portierungen von Dingen, die nicht im C-Standard spezifiziert sind, wie etwa Interrupt-Programmierung.

Das Interface für avr-gcc ist die Kommandozeile einer shell/Eingabeaufforderung, aber es gibt wie gesagt IDEs, die um avr-gcc herum ein Framework deiner Wahl schaffen.

avr-gcc ist zwar frei (und sogar kostenlos), was aber nicht heissen soll, daß er nicht leistungsfähig ist. Er macht guten Code, erlaubt dir einen Blick in den generierten Assembler, unterstützt unterschiedliche Debug-Formate und Optimierungsstufen und unterstützt den *kompletten* Sprachumfang von C! Du hast die Wahl zwischen Standards wie ANSI, ISO-C89, ISO-C99, GNU-C mit Spracherweiterungen usw.

Bleibt noch die Frage, was du unter "gut" verstehst...

Oft wird darunter verstanden, mit Kenntnissen für einen Tretroller einen Ferrari fahren zu wollen ;-)

In dem Maße, in dem man so ein komplexes Programm einsetzen will, muss man sich auch damit auseinandersetzen, gleiches gilt für die Hardware (AVR). Der Versuch, durch Rumclicken und Nichtlesen von Dokumentationen und Handbüchern Zeit zu sparen, ist oft Zeitveschwendung und häufige Frustrationsquelle.

Cluni
03.11.2006, 12:02
Gute Erklärung - da kann man SprinterSB nur zustimmen! ;)

SIGINT
03.11.2006, 13:14
Was aber noch von keinem erwaehnt wurde:
Der GCC-Compiler duerfte der C-Compiler sein, der auf den meisten Plattformen existiert und fuer die meisten Plattformen code erzeugen kann... mir ist zumindest kein anderer Compiler bekannt, der von Haus aus Code fuer MIPS,ARM,AVR,X86, und und und erzeugen kann. Zudem ist er der Standardcompiler fuer Linux-Systeme. Also warum irgendwas ClosedSource nutzen, wenn man den heiligen Gral der OpenSource Bewegung haben kann?!?!?

Gruss,
SIGINT

Zeroeightfifteen
03.11.2006, 16:04
ich probiere gerade AVR Studio aus. doch wenn ich nun einige includes habe dann hängt sich AVR Studio immer auf.
#include <stdlib.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

diese habe ich aus einem Beispielprogramm.

so weit ich das verstanden habe nimmt der include Befehl diese *.h datein aus den external dependencies.

was genau machen diese Datein und wo bekomme ich diese her?

edit:

nun habe ich noch gleich eine Frage.

wie kann ich mein Programm auf den Mega übertragen?

gibt es da keine Möglichkeit dies über AVR Studio zu übertragen oder muss ich das mit PonyProg machen?

SprinterSB
08.11.2006, 18:15
Bei neueren avr-gcc-Versionen gibt es die avr/signal.h nicht mehr. Womöglich ist AStudio irritiert. Man sollte immer erst avr-gcc installieren und erst danach AStudio. Eigentlich sind diese Header keine external dependencies sondern dem avr-gcc bekannt Standard-Includes. Dein Projekt verwendet diese Header ist aber nicht davon abhängig (im Sinne von make).