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
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
> ich benutze gss für PC Programmierung schon seit 2.* Version
kleiner Tippfehler :)
s/gss/gcc
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...
... 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.
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...
> 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?
> 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.