www.mikrocontroller.net

Forum: Compiler & IDEs WinAVR 20090313 Released


Autor: Mehmet Kendi (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: egberto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es schon Aussagen/Erfahrungen betzüglich der (entstehende)Codegröße 
(sonst bleib ich lieber bei der 2007er Version)?

Viele Grüße,

egberto

Autor: Andreas K. (andie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein kleines Projekt auf einem ATtiny13A mit folgenden 
Codegrößen:

WinAVR-20071221:  974 bytes  (95,1%)
WinAVR-20081205: 1508 bytes (147,3%)
WinAVR-20090313: 1508 bytes (147,3%)

Ich bleibe bei der 2007er Version ;-)

Gruß andie.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kasper wrote:
> Ich habe ein kleines Projekt auf einem ATtiny13A mit folgenden
> Codegrößen:
Repräsentativ.

> Ich bleibe bei der 2007er Version ;-)
Mach das.

Zurück in die Steinzeit!

Autor: mkmk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du die EEprom Funktionen benutzest, so werden die Programme seit 
den 2 letzten 2 Releases massiv aufgeblaeht. Wenn Du sie dann durch 
eigene ersetzest, schrumpft die Grösse auf das Normalmass zurück.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ja. Früher war alles besser ;-)

Das Problem scheint nur bei den Block-Funktionen für den EEPROM aus der 
avr-libc zu bestehen, also für eeprom_read_block und eeprom_write_block.

Die eeprom_read_block ruft im Endeffekt indirekt die __eerd_block auf, 
deren Implementierung ganz unschuldig aussieht:
   http://cvs.savannah.gnu.org/viewvc/avr-libc/libc/m...

Wenn man allerdings nen Dump macht und sieht, was da alles hinzugelinkt 
wird, dann sieht es nicht mehr ganz so prickelnd aus (siehe Anhang).

Und das kostet nicht nur mächtig Flash, sondern knabbert auch merklich 
am  RAM! Es werden sehr viele Register gesichert.

Das Problem sollte sich auf avr-libc-Ebene beheben lassen, indem das 
Makefile für die genannten Funktionen -mcall-prologues vermeidet.

Aus Applikationsebene sollte man die Funktionen vermeiden, wenn man sich 
nicht ohnehin über andere avr-libc Funktionen die 
Prolog/Epilog-Funktionen zieht. In dem Falls könnte man selbst ne 
Schleife um die read/write Byte Funktionen bauen, und muss bei dem 
EEPROM-Zeug zumindest nicht bei Null anfangen...

Johann

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die AVR-GCC 4.3.x erzeugen bei mir alle den selben Code. An der 
Optimierung wurde also nichts geändert.

Wenn Du AVRs benutzt, die der AVR-GCC 4.2.x schon kennt, solltest Du ihn 
ruhig weiter verwenden. Insbesondere, wenns eng im Flash wird.

Der AVR-GCC 4.3.x erzeugt oftmals doch recht seltsamen Code.


Peter

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Trotzdem sollte man prinzipiell nicht auf ältere Versionen 
zurückgreifen, sondern versuchen die Bugs in den neuen Versionen zu 
reparieren.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab eben mal mein aktuelles Projekt mit verschiedenen Versionen von 
avr-gcc übersetzt und die Codegröße anzeigen lassen
avr-gcc  |  WinAVR  | Code
---------+----------+------
 3.4.6   | 20060421 | 11656
 4.2.2   | 20071221 | 12244
 4.3.0   | 20080610 | 12068
 4.3.2   | 20081205 | 12152
 4.3.2   | 20090309 | 12122

Sei der Dezember-Release gab es also eine minimale Verbesserung, und in 
der 4-er Linie lässt sich eine Tendenz zu kleinerem Code hin erkennen.

Der 4-er Compiler schliesst weiter zur letzten 3-er Release auf und 
liegt nur noch 4% hinter ihr.

Simon K. wrote:
> Trotzdem sollte man prinzipiell nicht auf ältere Versionen
> zurückgreifen, sondern versuchen die Bugs in den neuen Versionen zu
> reparieren.

Klaro, aber bis dahin wird noch ein Weilchen vergehen. Ich seh das nicht 
so dogmatisch, daß man prinzipiell immer das Allerneueste haben bzw. 
einsetzen muss.

Johann

Autor: Mehmet Kendi (mkmk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atmega324P

WinAVR-20081205: 10108 bytes
WinAVR-20090313: 10110 bytes

Benutze beim Zugriff auf das interne Eeprom meine eigenen Lese- und 
Schreib-Funktionen.

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.