www.mikrocontroller.net

WinAVR


WinAVR ist die Windows-Distribution der C, C++ und Ada-Compiler aus der GNU compiler-collection AVR-GCC für AVR-Mikrocontroller. WinAVR enthält neben dem Compiler und den erforderlichen Zusatzprogrammen (sogen. Binutils) noch einige andere Pakete, z.B. die C-Standardbibliothek avr-libc (inkl. Dokumentation), die Programmiersoftware AVRDUDE und den Editor Programmer's Notepad.

Download über die WinAVR-Startseite

Inhaltsverzeichnis

[bearbeiten] Installation

Nach dem Installieren sollten Win9X-Rechner neu gestartet werden, um die Erweiterung des Suchpfades um die WinAVR-Verzeichnisse zu aktivieren (autoexec.bat). Bei Windows NT/2000/XP ist üblicherweise kein Neustart erforderlich, sollte aber dennoch ausgeführt werden, wenn Probleme auftreten (Fehler in der Art: Der Befehl ist falsch geschrieben/kann nicht gefunden werden...). Danach kann man sofort im Programmer's Notepad z.B. mit dem Beispielcode anfangen.

Zwei WinAVR Verzeichnisse müssen in der PATH-Umgebungsvariable aufgeführt sein:

C:\Dokumente und Einstellungen\willi>path
PATH=[...]C:\WinAVR\bin;C:\WinAVR\utils\bin;[...]

[bearbeiten] Tipps + Tricks

[bearbeiten] Umstieg von AVR-Studio mit avr-gcc zu WinAVR mit AVRISP

  • Programmer's Notepad 2 hat konfigurierbare Menüpunkte, vorkonfiguriert sind:
    • Make all
    • Make clean
    • Make program
  • Man muss sich selbst um ein passendes Makefile kümmern. Dazu kann WinAVR/mfile/mfile.tcl genutzt werden (Achtung, F_CPU ist im Template bereits mit 8 MHz eingestellt und muss ggf. von Hand geändert werden). mfile benötigt TCL/TK (Win32 download, ca 20 MB).
  • Zum Flashen wird AVRDUDE benutzt.
  • Wenn es beim Flashen einen 'out of sync' Fehler gibt, ist nicht der richtige AVRISP eingestellt (unterschiedliche Softwareversionen).

[bearbeiten] WinAVR Version

Die aktuelle WinAVR Version ist derzeit (06/2008) WinAVR-20080610. SourceForge.net WinAVR Projekt-Seite und Download

Enthalten sind u.a.:

  • GCC Version 4.3.0
  • avr-libc 1.6.2
  • Avrdude 5.5
  • GDB 6.6 ist nun eine native Windows-Anwendung

Wer mit Fließkommadaten arbeitet, sollte entweder die Vorgängerversion verwenden, oder die avr-libc aktualisieren. Siehe http://www.mikrocontroller.net/topic/86837

Weitere Infos siehe: Liste der Änderungen

[bearbeiten] Passende AVR-Studio Version

Wenn eine WinAVR-Version 2007... mit AVR Studio betrieben wird, ist AVR Studio Version >= 4.13 erforderlich.

Downloadadressen sind derzeit:

[bearbeiten] MAKE funktioniert nicht

[bearbeiten] Richtiges Make Programm?

> make all
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
Error makefile 461: Command syntax error
...

Wenn make mit dieser oder ähnlichen Fehlermeldung abbricht, ist der Pfad für ausführbare Programme nicht auf das make Programm aus dem GCC/Binutils Paket gesetzt. Es wird ganz banal das falsche Make-Programm (z.B. von Borland C oder Delphi) für das verwendete makefile aufgerufen. In diesem Fall ist die Umgebungsvariable PATH in Autoexec.Bat (Windows 98SE) bzw. in der Systemsteuerung (Windows XP, 2000) anzupassen.

[bearbeiten] gcc plug-in: Error: Object file not found on expected location

Diese Fehlermeldung kann nur auftauchen, wenn der GNU C Compiler aus dem AVR-Studio heraus bedient wird. Dass keine weiteren Fehlerursachen genannt werden, ist eigentlich ein AVR-Studio Bug.

Eine Analyse des AVR-Studio Bugs hat Johan Ekdahl im avrfreaks.net Forum beschrieben. AVR-Studio erkennt in gewissen Fällen beim Build-Vorgang auftretende Fehler nicht und erwartet eine nie hergestellte Ausgabedatei.

Auf jeden Fall sollte man in AVR Studio mal zwischen dem Build und Message-Fenster umschalten, ob ein einem von beiden mehr Infos stehen, was wodurch den Fehler produziert.

Wenn nicht mehr Infos aus AVR Studio herauszukitzeln sind, könnte man das Projekt beispielsweise als herkömmliches Make-Projekt aufsetzen, mit WinAVR kompilieren (Kommandozeile oder aus dem Programmers Notepad heraus) und auf Fehlermeldungen achten.

Siehe auch:

[bearbeiten] avr-gcc: _spawnvp: No such file or directory

> "make.exe" all

-------- begin --------
avr-gcc (GCC) 4.1.1 (WinAVR 20070122)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is
NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE.


Linking: main.c.elf
avr-gcc -mmcu=at90s2313 -I. -gdwarf-2 -DF_CPU=7372800UL -Os
-funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall
-Wstrict-prototypes -Wa,-adhlns=  -std=gnu99 -Wundef -MMD -MP -MF
.dep/main.c.elf.d  --output main.c.elf -Wl,-Map=main.c.map,--cref
-lm
avr-gcc: _spawnvp: No such file or directory
make.exe: *** [main.c.elf] Error 1

> Process Exit Code: 2

Bei WinAVR-20070122 und WinAVR-20070525 kann es unter VISTA und Windows98SE eine ähnliche Fehlermeldung wie oben gezeigt geben.

Verschiedene Binärpatches können diese Probleme beheben:

WinAVR-20071221 funktioniert unter Windows98SE, wie erste Tests zeigen, wie aus der Tüte, d.h. ohne Binärpatch (Jippy!).

[bearbeiten] ...\WinAVR\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487

> "make.exe" all
AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x470000, State 0x10000
E:\WinAVR\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487

-------- begin --------
avr-gcc (GCC) 3.4.3
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x470000, State 0x10000
E:\WinAVR\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487
make.exe: *** [sizebefore] Error 1

> Process Exit Code: 2

Wenn make mit dieser oder ähnlichen Fehlermeldung abbricht, ist es einen Versuch wert, die Hilfsdatei msys-1.0.dll im Ordner des Tools sh.exe (beim Beispiel E:\WinAVR\utils\bin\) auszutauschen. Eine Anleitung dazu gibt es von Madwizard (http://www.madwizard.org/extern/winavr-vista). Siehe auch im Forum die Frage von Lukas und die Frage von werdlangsammüde.

[bearbeiten] make: *** [####.eep] Error 1

Build started 18.8.2007 at 20:14:23
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load"
--change-section-lma .eeprom=0 -O ihex I2C_Motor.elf I2C_Motor.eep
c:\Programme\WinAVR\bin\avr-objcopy.exe: there are no sections to be
copied!
c:\Programme\WinAVR\bin\avr-objcopy.exe: --change-section-lma
.eeprom=0x00000000 never used
make: *** [I2C_Motor.eep] Error 1
Build succeeded with 0 Warnings...

Diese oder eine ähnliche Fehlermeldung erscheint, wenn im erzeugten Programm der EEPROM-Abschnitt unbenutzt ist. Um die Fehlermeldung zu unterdrücken, kann man vor den Aufruf von avr-objcopy im Makefile ein Minuszeichen schreiben (Forenbeitrag von Jörg).

Beispielzeilen in einem Makefile ohne Fehlerunterdrückung:

%.eep: %.elf
	@echo
	@echo $(MSG_EEPROM) $@
	$(OBJCOPY) -j .eeprom \
        --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 \
        --no-change-warnings -O $(FORMAT) \
        $< $@ || exit 0

Beispielzeilen in einem Makefile mit Fehlerunterdrückung:

%.eep: %.elf
	@echo
	@echo $(MSG_EEPROM) $@
	-$(OBJCOPY) -j .eeprom \
        --set-section-flags=.eeprom="alloc,load" \
	--change-section-lma .eeprom=0 \
        --no-change-warnings -O $(FORMAT) \
        $< $@ || exit 0


[bearbeiten] make.exe: *** No rule to make target `main.elf', needed by `elf'.

-------- begin --------
avr-gcc (GCC) 4.2.2 (WinAVR 20071221rc1)
Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO warranty;
not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

make.exe: *** No rule to make target `main.elf', needed by `elf'.  Stop.

> Process Exit Code: 2
> Time Taken: 00:02

Diese oder eine ähnliche Fehlermeldung erscheint, wenn der Quelltest NICHT main.c heisst und ein Makefile OHNE weitere Anpassung an den verwendeten Dateinamen der Quelltextdatei verwendet wird.

Abhilfe ist also die Quelltextdatei in main.c umbenennen oder das Makefile anzupassen (siehe AVR-GCC-Tutorial).

Eine weitere Fehlerursache könnte auch eine Ordnerstruktur mit Leerzeichen und/oder Sonderzeichen im Pfad sein.

[bearbeiten] Portable Installation

Das Hauptproblem beim Ausführen von WinAVR von einem USB-Stick ist der fehlende Eintrag für den Compilerpfad in der Windowsumgebungsvariable PATH.

Die folgende Batchdatei zum Starten des Programmers Notepad extrahiert mit %~dp0 das Laufwerk und den Pfad vom Aufruf der Batchdatei und setzt damit PATH neu.

Zu beachten ist, das die neu gesetzte PATH Variable nicht systemweit etabliert wird, sondern nur für Prozesse gilt, die aus dieser Batch (mit dieser cmd Session) aufgerufen werden (in diesem Fall pn.exe)

....\WinAVR\pn.bat


@echo off
echo PN.BAT Version 1.0

set BatchPath=%~dp0
set BinDir=pn\
set BinDir=%BatchPath%%BinDir%
set PATH=%BatchPath%\bin;%BatchPath%\utils\bin;%PATH%

start %BinDir%pn.exe

[bearbeiten] Code-Größe anzeigen

[bearbeiten] Avrdude findet libusb0.dll nicht (WinAVR-20070525)

Forenbeitrag von Paul: Habe leider noch etwas zu bemängeln, und zwar meckerte avrdude, dass es die "libusb0.dll" nicht fand. Musste dann erst noch manuell den Pfad c:\winavr\utils\libusb\bin in die autoxecec.bat eintragen. Siehe auch Diskussion bei www.avrfreaks.net

[bearbeiten] C-Quellcode fehlt im *.LSS Listing (WinAVR-20071221)

In WinAVR-20071221 werden im ggf. erzeugten Disassemblerlisting (Dateiendung .LSS) keine Quellcodezeilen angezeigt. Es handelt sich um ein Problem des Programms avr-objdump (Forenbeitrag). Der User DosMan hat einen Workaround #1 bei www.avrfreaks.net angegeben (zum Download ggf. kostenlos registrieren). Ein anderer ebenfalls bei www.avrfreaks.net beschriebener Workaround #2 besteht darin, die Zeilenenden im C-Quelltext in "Unix-Zeilenenden" (nur \n statt \n\r) umzuformen bzw. nur mit Editoren zu arbeiten, die solche Unix-Zeilenenden erzeugen.

[bearbeiten] Hilfe! Habe neues WinAVR und das Datensegement ist jetzt riesig! (WinAVR-20071221)

Es gibt in der aktuellen Version bereits gemeldete Bugs im Zusammenhang mit float Variablen bzw. den neu geschriebenen Gleitzahlfunktionen der avr-libc (Forumsbeitrag). Wir können im Moment nur hoffen (oder besser: mitarbeiten), dass bald ein WinAVR Update herauskommt.

[bearbeiten] Siehe auch

webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net