Forum: Compiler & IDEs GCC vs. andere C-Compiler?


von Pierre (Gast)


Lesenswert?

Hallo,

kleine Frage,
der GCC ist ja ein Freeware C-Compiler...
jetzt gibt es da C-Compiler für bis zu 500.- oder so..
welcher Compiler wäre denn hier zu empfehlen, bzw was ist der beste
C-Compiler für AVR's wenn Geld keine Rolle spielt ?

z.B der ICCAVR? (der Code für Interrupt's und so sei jedoch gar
schlechter als es der GCC macht)
oder
"IAR Embedded Workbench V4.12 for Atmel AVR"

was wisst ihr hierzu?

thx

von -daniel- (Gast)


Lesenswert?

Hi,

kleine Korrektur, GCC ist kein C Compiler sondern ganze Compilersuite
GNU Compiler Collection = GCC
und GCC ist auf keinen Fall freeware, sondern Open Source Software
und ist unter GPL

ich benutze gss für PC Programmierung schon seit 2.* Version
im Moment ist 4.1.1 aktuell
Es hat sich einiges getan, IMHO zum besseren
bessere Standard Compliance und sonst bin ich recht zufrieden.

Als Alternative hatte ich mal (jetzt nicht mehr) icc von Intel
einfach um meinen Code zu testen und durch mehrere Compiler zu jagen.
Bzw die Fehlermeldungen zu vergleichen. Wobei ich sagen muss
gcc ist in der Hinsicht auch sehr gut.

Wie es auf AVR aussieht, kann dir leider nicht sagen
Bekommst du Probleme mit Codedichte, Binary passt nicht in Flash?
Also wenn es dir um Performance geht, da würde ich mir weniger
Sorgen machen.

Gruss, Daniel

von -daniel- (Gast)


Lesenswert?

> ich benutze gss für PC Programmierung schon seit 2.* Version

kleiner Tippfehler :)

s/gss/gcc

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Der IAR ist vermutlich wirklich der beste Compiler was die
Größe und Effektivität des generierten Codes für AVR angeht,
wenn Geld in der Tat keine Rolle spielt.  Die Lizenzen dafür
sind jedoch exorbitant teuer (im vierstelligen Bereich für
eine Einzelnutzer-Lizenz).  Weitere Pluspunkte für IAR: hat
eine Bibliothek, die C99 wirklich komplett unterstützt
(einschließlich solcher für den AVR eher Exoten wie komplettem
Support für wide characters).  Nachteil (außer dem Preis): nur
für Windows, kann kein ELF erzeugen (für den AVR, für andere
Prozessoren schon), und da die Bibliothek ein zugekauftes Add-On
ist, ist sie zwar aus Sicht des C-Standards sehr vollständig,
aber an speziellen AVR-Features ist sie eher mager.  Eine
komplette printf-Familie, bei der man den Format-String im ROM
ablegen kann, sucht man dort, es gibt nur einige Funktionen der
Familie.

Vorsicht mit dem Begriff "ICCAVR": der IAR nennt sich auch so,
er definiert zum Beispiel den Makro _ICCAVR_ von sich aus.

Wenn du den IAR aber nicht aus seinem eigenen Klickibunti heraus
betreiben willst, sondern über irgendeine Art von Batch oder
Makefile oder sowas, wirst du dich wundern, dass es tatsächlich
Compiler gibt, die noch mehr (und teilweise noch schlechter
dokumentierte) Kommandozeilen-Optionen haben als der GCC...

von Ingo (Gast)


Lesenswert?

... mit dem Unterschied, dass man für den gcc die Erklärungen im Netz
findet, bei anderen Compilern kann das schon mal knifflig werden.

Ein IMHO weiterer Vorteil der gcc-Suite ist, dass sie auf vielen
Plattformen zur Verfügung steht. Da muss man die Compiler-Optionen (im
Wesentlichen) nur einmal lernen.

Die n-tausend Euro für die Lizenz sind meistens besser in vernünftige
Ausbildung der Mitarbeiter investiert. Die Speicher- und
Laufzeiteffizienz hängt erheblich stärker vom Design der Anwendung als
vom Compiler ab.

von johnny.m (Gast)


Lesenswert?

Wenns nicht umsonst sein soll, aber halt auch nicht zu teuer, man aber
trotzdem ne professionelle IDE haben will, dann tuts auch der
CodeVision. Lizenz kostet 150€, jeweils mit Support für ein Jahr,
Supportverlängerung für ein weiteres Jahr irgendwas um die Hälfte.
CodeVision unterstützt ähnlich wie andere professionelle
Embedded-C-Compiler (also im Unterschied zum ANSI-C-Compiler aus GCC)
Bitoperationen und vereinfachte Zugriffe auf µC-spezifische Funktionen
und hat als schönes Gimmick den Code Generation Wizard (automatische
Erstellung des Initialisierungscodes für die Peripheriekomponenten).
Davon gibts auch ne Freeware-Version mit Code Size Limit (1 K Code für
AVRs mit bis 8 K Flash, 2 K Code für alle anderen) und fehlender
Unterstützung für Interrupt-gesteuertes UART-Handling.

Ich persönlich habe ne ganze Weile mit CodeVision gearbeitet und war
eigentlich sehr zufrieden. Mittlerweile funktioniert allerdings das
Zusammenspiel zwischen dem [kostenlosen] AVRStudio und dem
[kostenlosen] WINAVR tadellos, so dass auch in Anbetracht der
deutlichen Zunahme der PC-Arbeitsplätze in meinem Zuständigkeitsbereich
ein Umstieg auf WINAVR/AVRStudio sinnvoll schien. Und bisher bin ich
auch mit den kostenlosen Sachen sehr zufrieden...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> CodeVision unterstützt ähnlich wie andere professionelle
> Embedded-C-Compiler (also im Unterschied zum ANSI-C-Compiler aus
> GCC) Bitoperationen

Bitoperationen unterstützt GCC auch. ;-)

Du meinst wahrscheinlich sowas wie:

PORTB.0 = 1;

Das ist kein C, d. h. es widerspricht der gültigen C-Syntax (und lässt
sich daher auch nicht als "Extension" deklarieren).  Daher
unterstützt
es übrigens auch IAR nicht.  Ich sehe auch keinen wirklichen Vorteil
gegenüber der Standard-C-Notation:

PORTB |= (1 << 0);

Wer hardwarenah C programmieren will, sollte sich halt mit derartigen
C-Konstrukten (so obskur sie erstmal erscheinen) auskennen.  Man kann
sich das ja auch in einem Makro kapseln, wenn man das zu unleserlich
findet.

> und vereinfachte Zugriffe auf µC-spezifische Funktionen

Was meinst du damit eigentlich genau?

von Fabian Scheler (Gast)


Lesenswert?

> PORTB.0 = 1;

Da stimmt, das geht nicht, Bezeichner dürfen in C nicht mit einer
Ziffer anfangen, aber das hier

PORTB.bit0 = 1;

sollte mit Hilfe eines Bitfelds keine Probleme bereiten. Ich bevorzuge
aber auch die C-Bitoperationen, spätestens wenn man mehrere Bits setzen
will, artet obiges IMO in fürchterlich viel Schreibaufwand aus.

Ciao, Fabian

von johnny.m (Gast)


Lesenswert?

Habe ja auch nicht gesagt, dass ich das mit den direkten Bitzugriffen
als großen Mega-Vorteil sehe... Bei Abfragen isses aber schon
vorteilhaft (z.B. wenn PINB.0 bei mir als ENABLE #defined ist, brauch
ich nur noch abzufragen if(ENABLE){} oder so. Ist jedenfalls kürzer
(und m.E. besser lesbar) als if(PINB & (1 << ENABLE)){}). Klar, mit
Bitfeldern kann man das natürlich auch machen... Ich denke mal, dass da
beim CodeVision auch im Prinzip nix anderes dahintersteckt, nur dass es
eben bereits fertig implementiert ist und man es nur noch nutzen muss.

Der Zugriff aufs EEPROM z.B. ist einfacher (kürzere Schreibweise...)
als im GCC, was aber auch keinen übermäßig großen Vorteil darstellt.
Auch das Einfügen von Assembler-Befehlen oder -Abschnitten ist von der
Schreibweise her ein bisschen übersichtlicher. Aber es ist schon
richtig: Es sind fast alles nur Sachen der Schreibweise, die man sich
in recht kurzer Zeit angewöhnen kann.

Ein großer NACHTEIL von CodeVision, der mir gerade noch einfällt (der
mir aber bisher keine Probleme bereitet hat) ist übrigens die
Beschränkung der Variablengrößen auf (afaik) 32 Bit und das Fehlen
einiger nützlicher Bibliotheken (eben z.B. der inttypes.h).

Wie schon gesagt: Es ist möglicherweise ein wenig komfortabler in der
Benutzung, aber wer professionell damit arbeitet, kommt auch mit WINAVR
klar. Wenn man für 0,00€ eine Umgebung mit allem Schnickschnack und
Compiler kriegt, warum dann noch Geld ausgeben? OK, IAR ist
möglicherweise noch ein bisschen optimaler vom erzeugten Code her (Nur
so ne Vermutung anhand der Aussagen anderer) und ist wahrscheinlich
wesentlich schneller was die Unterstützung neuer Bausteine angeht (das
trifft im Übrigen auch auf CodeVision und andere kommerzielle IDEs zu),
aber es kostet halt Geld...

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
Noch kein Account? Hier anmelden.