WinAVR

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

WinAVR ist die Windows-Distribution der C und C++ aus der GNU compiler-collection AVR-GCC für AVR-Mikrocontroller. Der Ada-Compiler war mal enthalten und kann inzwischen nachinstalliert werden. 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

Installation

Auf 64bit-Windows darf WinAVR nicht im Standard-Programmverzeichnis "C:\Program Files (x86)" installiert werden, sonst funktioniert der Compiler nicht. Es ist entweder das vom Installer vorgeschlagene Defaultverzeichnis zu verwenden, oder z.B. "C:\WinAVR".

Andere Lösung: Einen symbolischen Link ohne Leerzeichen anlegen: Als Administrator im Hauptverzeichnis ausführen: mklink /d programs "Program Files (x86)" und winavr (sowie viele weitere Programme) nach "c:\programs" installieren.

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;[...]

Tipps + Tricks

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).

WinAVR Version

Die aktuelle WinAVR Version ist derzeit (Stand 02/2016) WinAVR-20100110. SourceForge.net WinAVR Projekt-Seite und Download

Versionsnummern:

  • avr-gcc 4.3.3
  • AVR-LibC 1.6.7

Bekannte Probleme:

  • [1]: AVRDUDE Fehler: avrdude was compiled without usb support. Abhilfe: Ältere Version nehmen oder selbst kompilieren [2].
  • [3]: Fehlermeldung beim Aufruf von z. B: avr-gcc: Kommt es zur folgender Fehlermeldung:
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

so ist das Temp-Verzeichnis als "Read-Only" markiert. Abhilfe: In einem Command-Window folgenden Befehl ausführen:

attrib -R %temp%

AVRDUDE Version

WinAVR nutzt zum Programmieren das Programm AVRDUDE, für dieses gibt es öfter Updates im Programm, für neue AVRs und Programmer. Bitte also ab undd zu bei AVRDUDE nachsehen und AVRDUDE.EXE und AVRDUDE.CONF erneuern.

MAKE funktioniert nicht

Siehe auch:

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.

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 in 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:

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!).

...\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.

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

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 Quelltext 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.

Eine weitere Ursache kann das benutzte Makefile sein. Es ist da anscheinend eins im Umlauf mit falscher Einrückung der Anweisungen ([4] und [5])

fatal error: opening dependency file .dep/main.o.d: No such file or directory

avr-gcc (GCC) 4.2.2 (WinAVR 20071221)
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.

Compiling: main.c
avr-gcc -c -mmcu=atmega16 -I. -gdwarf-2   -Os -funsigned-char
-funsigned-bitfiel
ds -fpack-struct -fshort-enums -Wall -Wstrict-prototypes
-Wa,-adhlns=main.lst  -
std=gnu99 -DF_OSC=3686400 -MD -MP -MF .dep/main.o.d main.c -o main.o
main.c:21: fatal error: opening dependency file .dep/main.o.d: No such
file or directory
compilation terminated.
make: *** [main.o] Error 1

Sind Leerzeichen oder Sonderzeichen im Verzeichnispfad ([6])?

Wird VISTA 64 benutzt? Obige Fehlermeldung kann als zweite Fehlermeldung nach der eigentlichen VISTA-spezifischen Fehlermeldung (sync_with_child Problem) kommen. Die Lösung hat dann MADWIZARD.

make: Interrupt/Exception caught (code = 0xc00000fd, addr = 0x4217b3)

WinAVR darf nicht im Standard-Programmverzeichnis "C:\Program Files (x86)" installiert werden, sonst kommt dieser Fehler. Es ist entweder das vom Installer vorgeschlagene Defaultverzeichnis zu verwenden, oder z.B. "C:\WinAVR".

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

Code-Größe anzeigen

WinAVR-2010 soll die letzte Version sein? [7]

MHV AVR Tools - A WinAVR Replacement. With WinAVR marked as inactive, and no official release yet from Atmel, we (Make Hack Void, an association of geeks & artists. We are forming a Hackerspace* in Canberra) have built our own set of tools in a WinAVR-like layout suitable for use as a replacement. Please note that no guarantees as to fitness or suitability are being made. In particular,GCC 4.5.1 has not been tested as extensively as GCC 4.4.x, so use our builds at your own risk.

Update 5/2011: Laut Beitrag bei avrfreaks.net wird die Entwicklung von WinAVR fortgesetzt.

08/2015: WinAVR mit aktueller Toolchain (Compiler + Bibliothken) von Atmel versehen: http://www.mikrocontroller.net/topic/372924#4215881

Please browse to the present location for files originally found at

Siehe auch

Downloads