Forum: Compiler & IDEs Update von WinAVR2010


von Matthias W. (matt007)


Lesenswert?

Zum Übersetzen, Linken und auf das Target laden verwende ich seit Jahren 
WinAVR. Die letzte offizielle WinAVR-Zusammenstellung stammt von 2010.

Es gab Hinweise für ein Update:
Beitrag "Update von Winavr2010 auf gcc 4.8 Howto"
Beitrag "Re: WinAVR 2010 / AVR-GCC und Atmega48PA"

unter der Atmel-Adresse ist kein Paket mehr zu finden:
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORWINDOWS.aspx

Bei Microchip kann man avr8-gnu-toolchain-3.6.2.1759-win32.any.x86.zip 
herunterladen unter 
https://www.microchip.com/mplab/avr-support/avr-and-arm-toolchains-c-compilers

Im Readme avr8-gnu-toolchain-3.6.1.1752-readme.pdf steht der Hinweis:
Downloading/Installing on Windows
"If you want to try the Atmel AVR8 GNU toolchain alone, you can download 
it from here".

Im Vergleich zu WinAVR2010 sind im zip neuere Versionen:
- GCC: 5.4.0 statt 4.3.3 in WinAVR2010
- binutils: 2.26 statt 2.19 in WinAVR2010
- avr-libc: 2.0.0 statt 1.6.7 in WinAVR2010

leider sind kaum Hinweise gegeben wie ein Update von WinAVR2010 mit 
diesem Paket gemacht werden soll.

nicht im zip-Paket enthalten sind
- AVRDUDE
- USB-Treiber für AVRDUDE libusb0.dll
- make.exe
- Utils für Nutzung im Makefile.

um vorhandene Makefiles die bisher unter WinAVR2010 liefen zu nutzen 
reicht es also nicht das zip-file einfach auszupacken.

es ist nötig etwas zusammenzubasteln.

Microchip schreibt: "If the toolchain is installed separately.... 
upgrading is not supported. You can install the new package side-by-side 
of the old package and use it."

Hier ein paar Hinweise die bei mir zu einer lauffähigen Version unter 
Win7 64bit geführt haben:

Verzeichnis C:\WINAVR anlegen
avr8-gnu-toolchain-3.6.2.1759-win32.any.x86.zip in diesem Verzeichnis 
auspacken, dann das zip löschen

Dateien nach C:\WINAVR\bin hinzukopieren wie
- avrdude.exe (neuere Fassung, z.B. 6.3 aus dem Netz)
- avrdude.conf (neuere Fassung aus dem Netz)
- giveio.sys aus Arduino (fuer ISP-Programmierung per Parallel-Port)
- install_giveio.bat aus Arduino
- remove_giveio.bat aus Arduino
- status_giveio.bat aus Arduino
- cygwin1.dll aus WinAVR
- itcl32.dll aus WinAVR
- itk32.dll aus WinAVR
- libiconv-2.dll aus Arduino
- libusb0.dll aus Arduino
- srec_cat.exe aus WinAVR
- splint.exe aus WinAVR
- tcl84.dll aus WinAVR
- tclpip84.dll aus WinAVR
- tclsh84.exe aus WinAVR
- tk84.dll aus WinAVR
- wish84.exe aus WinAVR

Dateien nach C:\WINAVR\utils\bin kopieren die in WinAVR2010 waren
enthält in bin:
- cp.exe aus WinAVR
- diff.exe aus WinAVR
- echo.exe aus WinAVR
- make.exe aus WinAVR (ggf. neues make.exe nehmen)
- msys-1.0.dll aus WinAVR
- rm.exe aus WinAVR
- sed.exe aus WinAVR
- sh.exe aus WinAVR
- msys-1.dll aus WinAVR
- ...

Dateien nach C:\WINAVR\doc hinzukopieren wie alte Ordner
- avrdude - Doku dazu aus WinAVR
- gcc     - Doku dazu aus WinAVR
- gdb     - Doku dazu aus WinAVR
- splint  - Doku dazu aus WinAVR

Registry ggf. anpassen mittels Regedit:
- in Registry nach WinAVR suchen -> Stellen in HKEY_LOCAL_MACHINE

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Free Software 
Foundation\WINAVR\BINUTILS -> C:\WINAVR
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Free Software 
Foundation\WINAVR\G++ -> C:\WINAVR
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Free Software 
Foundation\WINAVR\GCC -> C:\WINAVR
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\WinAVR\20100110 -> C:\WINAVR
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session 
Manager\Environment\AVR32_HOME -> C:\WINAVR

Suchpfad ggf. ändern:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session 
Manager\Environment\Path -> 
C:\WINAVR\bin;C:\WINAVR\utils\bin;%SystemRoot%\system32;%SystemRoot%;%Sy 
stemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

den Deinstallierpfad ggf. lassen.

nach Booten des Rechners werden die Änderungen wirksam.

im Vergleich zu WinAVR2010 zeigten sich folgende Codegrößen:
LED-Blink-Programmm auf Atmega32U4:
main.hex  6kB vs. 5kB bei WinAVR2010
data+text 1834 bytes vs. 1720 bytes bei WinAVR2010

Laststeuerprogramm mit ADC/DAC/RTC/SRAM auf Atmega2560:
main.hex   24kB vs. 25kB bei WinAVR2010
data+text 428+8068 bytes vs. 446+8458 bytes bei WinAVR2010

unschön groß erscheint der totale Speicher incl. der 
Debug-Informationen.
59187 bytes vs. 39231 bytes bei WinAVR2010.

Am Makefile wurde nichts verändert. Die Einstellungen sind dieselben wie 
bei WINAVR2010.

Vielleicht helfen diese Angaben dem einen oder anderen sich auch ein 
neueres WinAVR auf Basis der obigen aktuellen zip-Datei einzurichten.

Viel Erfolg !
Matthias

von Oliver S. (oliverso)


Lesenswert?

Hm. Man kanns auch unnötig kompliziert machen. WinAVR ist ja nun nix 
anderes als ein avr-gcc, gebündelt mit Notepad++ und MFile. Das war zu 
seiner Zeit damals eine tolle Sache, weil's für Windows nichts besseres 
gab, aber das ist lange her.

Das Stichwort Atmel Studio ist ja schon gefallen, auch noch zu nennen 
sind Eclipse mit Avr-plugin, oder Codeblocks. Alles ausgewachsene IDEs, 
die über das vom Notepad++ gebotene weit hinausgehen.

Eine wirklich aktuellen avr-gcc mit make gibt es hier:

http://blog.zakkemble.net/avr-gcc-
builds/

Dazu ein aktuelles MFile zum Erstellen von makefiles, oder eben eine 
richtige IDE, und man ist im 21 Jahrhundert.

Oliver

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> leider sind kaum Hinweise gegeben wie ein Update von WinAVR2010 mit
> diesem Paket gemacht werden soll.

Weil es kein Update ist sondern eine "andere" Toolchain.  Die 2 
Toolchains (oder mehr) können parallel genutzt werden, es besteht keine 
Notwendigkeit, beide Toolchains zu Frankensteins Monster zu verwursten.

> nicht im zip-Paket enthalten sind [...]

Deshalb bleiben die alten Pfade in PATH.

> es ist nötig etwas zusammenzubasteln.

Nope.

> Microchip schreibt: "If the toolchain is installed separately....
> upgrading is not supported. You can install the new package side-by-side
> of the old package and use it."

Genau.  Einfach den Pfah in PATH eintragen (vor dem von WinAVR) und gut 
iss.

Da braucht's weder Rumgewusel im Dateisystem noch Remstochern in der 
Registry!

> Verzeichnis C:\WINAVR anlegen
> avr8-gnu-toolchain-3.6.2.1759-win32.any.x86.zip in diesem Verzeichnis
> auspacken, dann das zip löschen

Und ggf. Pfad anpadden, so dass keine Sonderzeichen drinne sind.

Weil die Tools mi Pfad sind, rehct ein "avr-gcc" auf Kommandozeile, um 
den neuen compiler aufzurufen, z.B. mit --version um zu sehen, welche 
Version es ist.

Und falls du das alte WinAVR brauchst für Legacy-Projekte oder um 
erzeugten Code zu vergleichen, einfach mit absoluten Pfad aufrufen und 
fertig.

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> Nope.

Danke Johann !
wo ist denn ein neues aktuelles WinAVR zu finden, so daß meine alten 
Makefiles ohne Probleme laufen. Eine IDE/Studio brauche/will ich nicht.

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> Weil die Tools mi Pfad sind, rehct ein "avr-gcc" auf Kommandozeile, um
> den neuen compiler aufzurufen,

danke für den Hinweis Johann.
Du hast wohl verschiedene Umgebungen auf dem PC parallel in Nutzung.

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Eine wirklich aktuellen avr-gcc mit make gibt es hier:
> http://blog.zakkemble.net/avr-gcc-builds/

Danke Oliver für den Hinweis !

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Eine wirklich aktuellen avr-gcc mit make gibt es hier:
> http://blog.zakkemble.net/avr-gcc-builds/

hier gibt es 2 Pakete zum Download:
avr-gcc-9.1.0-x64-mingw.zip (56.48 MB)
AVG-GCC 9.1.0 Windows x64 (64 bit)
Downloaded 728 times

avr-gcc-9.1.0-x86-mingw.zip (54.28 MB)
AVG-GCC 9.1.0 Windows x86 (32 bit)
Downloaded 226 times

Gibt es einen Grund das erste - das offenbar häufiger heruntergeladen 
wird - nicht zu nehmen wenn man Win7 64bit hat?

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> Nope.

ist aus Deiner Sicht avr-gcc-9.1.0-x64-mingw.zip (56.48 MB) ein 
vollwertiger Ersatz?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Du hast wohl verschiedene Umgebungen auf dem PC parallel in Nutzung.

"Umgebungen" nicht, aber AVR-Toolchains (GCC) ca. 20 Stück.

Das make ist noch aus WinAVR-20100110 und tut seine Dienste, ich setze 
die Tools aber auch nicht beruflich ein.

Die Tools sind WinAVR, von Atmel, MHV und die meisten selbstgeneriert 
unter Linux.

https://sourceforge.net/projects/mobilechessboar/files/avr-gcc%20snapshots%20(Win32)/

Das sind einfach nur die Tools (GCC, Binutils, AVR-Libc) generiert für 
MinGW32 und als ZIP.  Zur "Installation" einfach auspacken und 
umbenennen falls der Pfadname nicht passt.  Generiert wurde das aus den 
GNU / AVR-LibC Quellen, i.d.R ohne spezielle Patches.  Jedenfalls ohne 
extra Patches von Atmel / Microchip.

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> Zur "Installation" einfach auspacken und
> umbenennen falls der Pfadname nicht passt.  Generiert wurde das aus den
> GNU / AVR-LibC Quellen, i.d.R ohne spezielle Patches.

Danke Johann !

von Ingo Less (Gast)


Lesenswert?

Kann mir jemand sagen wie ich mit Atmel Studio 7 die Ausgabe der 
Codegröße in % hinbekomme? Es steht bei mir alles auf 0%. Irgendwie muss 
die avr-size dort mit eingebunden werden oder?

von Ingo Less (Gast)


Lesenswert?

Vergessen: unter Verwendung der avr-gcc-9.1.0-x64-mingw, mit den 
offiziellen Atmel Toolchains gibts da keine Probleme.

von Matthias W. (matt007)


Lesenswert?

Ingo Less schrieb:
> unter Verwendung der avr-gcc-9.1.0-x64-mingw, mit den
> offiziellen Atmel Toolchains gibts da keine Probleme.

Danke Ingo !

von 900ss (900ss)


Lesenswert?

Ingo Less schrieb:
> unter Verwendung der avr-gcc-9.1.0-x64-mingw, mit den offiziellen Atmel
> Toolchains gibts da keine Probleme

Kapier deine Kombination nicht.

Du hast die Atmel Toolchain installiert und dazu die gcc-9.1.0-x64 und 
nutzt diese von der Atmel Installation aus? Oder wie genau?

von Ingo Less (Gast)


Lesenswert?

Mit den AVR Toolchains läuft avr-size, mit dem 9.1 nicht

von 900ss (900ss)


Lesenswert?

Ok, dann ist 's klar :)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> ist aus Deiner Sicht avr-gcc-9.1.0-x64-mingw.zip (56.48 MB) ein
> vollwertiger Ersatz?

Kommt frauf an was für dich vollwertig ist.  WinAVR war ja mehr als ne 
reine Toolchain: make, Mfile, Simulator, Insight/TCL, avrdude, grep, 
sed, awk, ...

Mit v9 hab ich keine Erfahrung, es wird aber berichtet über Zunahme an 
Größe von generiertem Code bzgl. v8.  Keine Ahnung wie gravierand das 
ist; Codegröße schwankt immer mal wieder mit der Version.  Wenn du nicht 
den letzten Schrei an C++20 Features braucht bist mit v8 vielleicht 
besser bedient.

Ingo Less schrieb:
> Mit den AVR Toolchains läuft avr-size, mit dem 9.1 nicht

Einige Distributionen kommen mit einem gepatchten avr-size, das die 
Speichergrößen von verschiedenen Derivaten hinzufügt zwecks Anzeige von 
Resourcenverbrauch.  In die offizielle Release / Codebase hat's dieses 
Patch aber nie geschafft.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Johann L. schrieb:
> Kommt frauf an was für dich vollwertig ist.  WinAVR war ja mehr als ne
> reine Toolchain: make, Mfile, Simulator, Insight/TCL, avrdude, grep,
> sed, awk, ...

Nun ja, make und avrdude lassen sich einfach besorgen (bzw. sind in den 
Paketen von zak mit dabei), und der Simulator steckt im avr-gdb (den man 
sich leider wegen des nach wie vor ungefixten Flash-Diassemble-Bugs eh 
selber bauen muß). Wobei, wenn man einen Simulator braucht, nimmt man eh 
besser das Studio.

Den ganzen Rest braucht ein "handelsüblicher" Windowsuser sowieso nicht 
;)

Oliver

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Dazu ein aktuelles MFile zum Erstellen von makefiles

kannst Du dazu einen Link angeben?
ich habe das Mfile das bei WINAVR2010 beigepackt war.

im Ordner mfile von WINAVR liegt mfile.tcl, mfile.xbm und 
makefile_template. In help.html steht jedoch nicht wie man das zum 
Laufen bekommt.

einfach aufrufen von mfile.tcl klappt nicht. Einen Pfad auf das 
Verzeichnis mfile habe ich gesetzt. Außerdem liegen im bin-Verzeichnis 
Dateien wie wish84.exe, tclsh84.exe, itcl32.dll, itk32.dll usw.

es sollte doch kein Hexenwerk sein das in Betrieb zu bekommen?

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> Kommt frauf an was für dich vollwertig ist.

vollwertig ist für mich vergleichbarer Funktionsumfang.

> WinAVR war ja mehr als ne
> reine Toolchain: make, Mfile, Simulator, Insight/TCL, avrdude, grep,
> sed, awk, ...

ja. Deswegen sah ich mich genötigt selbst etwas funktionsähnliches 
zusammenzubauen. Es mag ja sein daß es geschickter gegangen wäre. Wenn 
jemand dazu Hinweise hat - gerne.

> Mit v9 hab ich keine Erfahrung, es wird aber berichtet über Zunahme an
> Größe von generiertem Code bzgl. v8.

mein Test ergab für ein LED-Blink-Beispiel data+text 1886 bytes mit 
AVR-GCC8.2.0 64bit im Vergleich zu 1940 bytes für AVR-GCC9.1.0 32bit. 
WINAVR2010 sind 1720 bytes.

Der totale Speicher (incl. Debug-Infos) wuchs bei allen neueren 
Versionen gegenüber WINAVR2010 stark an. Bei GCC4.3.3 waren es 10657 
bytes, GCC8.2.0 64bit 21833 bytes und GCC9.1.0 32bit 22264 bytes.

bei einem deutlich größeren Programm für Atmega2560: totaler Speicher 
incl. Debug-Informationen: GCC4.3.3 39231 bytes, GCC8.2.0 64bit 72040 
bytes, GCC9.1.0 32bit 72689 bytes.

data+text waren bei WINAVR2010 (GCC4.3.3) 446+8458 bytes, GCC8.2.0 64bit 
428+7944 bytes, GCC9.1.0 32bit 428+8230 bytes.

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Den ganzen Rest braucht ein "handelsüblicher" Windowsuser sowieso nicht

nur funktioniert das alte Makefile dann eben nicht !
wenn es so einfach gewesen wäre hätte ich nicht angefangen zu suchen und 
etwas zusammenzubauen.

von Oliver S. (oliverso)


Lesenswert?

Matthias W. schrieb:
> nur funktioniert das alte Makefile dann eben nicht !
> wenn es so einfach gewesen wäre hätte ich nicht angefangen zu suchen und
> etwas zusammenzubauen.

Ach ja, das Steinzeit-Makefile von WimAVR nutzt tatsächlich ein sed.
Geht seit ungefähr 100000 IT-Jahren aber auch ohne.

Matthias W. schrieb:
> kannst Du dazu einen Link angeben?
> ich habe das Mfile das bei WINAVR2010 beigepackt war.

https://www.mikrocontroller.net/articles/Mfile

Oliver

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Geht seit ungefähr 100000 IT-Jahren aber auch ohne.

mein Makefile geht nicht ohne. Keine Ahnung wem es noch so geht.

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Matthias W. schrieb:
>> kannst Du dazu einen Link angeben?
>> ich habe das Mfile das bei WINAVR2010 beigepackt war.
> https://www.mikrocontroller.net/articles/Mfile

Danke Oliver,

leider bringt mich das nicht weiter.
http://www.sax.de/~joerg/mfile/ hatte ich angesehen.
im zip-File ist genau das was ich auch in WINAVR2010 vorfand.

auch das Readme
http://www.sax.de/~joerg/mfile/README.txt half mir bisher nicht.

vermutlich fehlt eine Verknüpfung?

ein tcl/tk-Aufruf-Thema?

von Oliver S. (oliverso)


Lesenswert?

ohje, das ist alles schon so lange her...

Ok, mfile braucht tcl, und davon eine uralte Version. Da wirst du das 
aus der WinAVR-Umgebung weiterverwenden müssen.

Es wäre vielleicht mal an der Zeit, einen Schnitt zu machen, und auf 
eine aktuellere Entwicklungsumgebung umzusteigen. Ein schnitt ist eh 
eforderlich, da die aktuelleren gccs bei deinen alten WinAVR-Projekten 
bei nicht-const progmem meckern, und du eh an den sourcen Änderungen 
vornehmen musst.

Ich nutze set ewigen Zeiten Eclipse mit dem avr-plugin, aber das ist 
Geschmackssache.

Oliver

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> ohje, das ist alles schon so lange her...

ja.

> Ok, mfile braucht tcl, und davon eine uralte Version. Da wirst du das
> aus der WinAVR-Umgebung weiterverwenden müssen.

ich habe kein Problem das zu nehmen was da ist, nur leider lässt mich 
die Doku dazu wie ich das in Gang bringe bisher im Stich.

Du schriebst: "Dazu ein aktuelles MFile zum Erstellen von makefiles..." 
- und so dachte ich - frag halt mal . . .

Kürzlich bin ich beim Versuch ein Makefile zu ändern verzweifelt. Es gab 
immer wieder Fehler. Vielleicht hätte mir mfile da geholfen - keine 
Ahnung. Hat das denn gar niemand mehr in Betrieb?

> Es wäre vielleicht mal an der Zeit, einen Schnitt zu machen, und auf
> eine aktuellere Entwicklungsumgebung umzusteigen.

darüber habe ich länger nachgedacht bevor ich das obige versuchte.
das Studio war mir zu sperrig. Manchmal war der Code zu groß, passte 
nicht in den Butterfly.

am besten kam ich mit WinAVR klar. Das lief stets rasch und 
unkompliziert. Daher möchte ich dabei bleiben.

> Ein schnitt ist eh
> eforderlich, da die aktuelleren gccs bei deinen alten WinAVR-Projekten
> bei nicht-const progmem meckern, und du eh an den sourcen Änderungen
> vornehmen musst.

die bisher probierten GCCs haben meinen C-Code anstandslos geschluckt.

> Ich nutze set ewigen Zeiten Eclipse mit dem avr-plugin, aber das ist
> Geschmackssache.

ja. Ich war mit Eclipse nicht so froh. Der Umgang damit war für mich 
zäher als WinAVR. Mein Rechner ist älter/langsamer. Oft sind mehrere 
Fenster auf. Da brauche ich Anwendungen die nicht viel Speicher fressen.

von Oliver S. (oliverso)


Lesenswert?

Matthias W. schrieb:
> Du schriebst: "Dazu ein aktuelles MFile zum Erstellen von makefiles..."
> - und so dachte ich - frag halt mal . . .

Ich dachte, da gäbs was neueres. Scheint aber nicht so zu sein.

Schau dir halt an, wie mfile im WinAVR-Paket aufgerufen wird (das muss 
ein batch-Datei oder sowas sein).

Ansonsten sind die makefiles jetzt aber nicht so kompliziert, als daß du 
nicht einfach eins von einem existierenden Projekt kopieren und da drin 
die sourcen und eventuell den Prozessor von Hand ändern könntest.

Oder du nimmst halt das hier als Vorlage:

https://www.mikrocontroller.net/articles/Beispiel_Makefile

Oliver

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> Ich dachte, da gäbs was neueres. Scheint aber nicht so zu sein.

ja. Leider.

> Schau dir halt an, wie mfile im WinAVR-Paket aufgerufen wird (das muss
> ein batch-Datei oder sowas sein).

WinAVR basiert vor allem auf der Funktionalität des Makefiles und der 
Tools die damit aufgerufen werden.

mfile wird nicht mittels des Makefile-Template aufgerufen. Da kann ich 
nichts abschauen.

> Ansonsten sind die makefiles jetzt aber nicht so kompliziert, als daß du
> nicht einfach eins von einem existierenden Projekt kopieren und da drin
> die sourcen und eventuell den Prozessor von Hand ändern könntest.

so hatte ich das bisher gemacht. Als ich bei einem Projekt dann C++ 
files statt der C-Files bisher verwenden wollte bin ich krachend 
gescheitert.

auch das Lesen der ersten 22 Seiten der Make-Beschreibung (danach hatte 
ich keine Lust mehr) und das Ansehen diverser youtube Tutorials brachte 
nicht wirklich weiter.

mit der Arduino-IDE läuft das Projekt. Nur verwendet Arduino kein 
Make.exe mehr. Der Output ist so lang und kryptisch daß ich da erst mal 
Abstand genommen habe das weiter zu verfolgen.

> Oder du nimmst halt das hier als Vorlage:
> https://www.mikrocontroller.net/articles/Beispiel_Makefile

Danke Oliver. So etwas ähnliches nutze ich ja. Bei den C-Files hat das 
bisher immer geklappt.

von Oliver S. (oliverso)


Lesenswert?

Matthias W. schrieb:
> mfile wird nicht mittels des Makefile-Template aufgerufen. Da kann ich
> nichts abschauen.

Vergiss das einfach. mfile ist der Generator für makefiles, aber wenn du 
das noch nie benutzt hast, ist das jetzt auch egal.

Im Netz finden sich auch makefile-beispiele für C++-Projekte.

Oliver

von Matthias W. (matt007)


Lesenswert?

Oliver S. schrieb:
> makefile-beispiele für C++-Projekte.

danach hatte ich eine ganze Weile gesucht. Nur ist eben wohl nur ganz 
selten etwas für AVR GCC passend dabei.

frustriert schmiss ich dann die Dateien in den Arduino und der hat es 
anstandslos geschluckt und fehlerfrei übersetzt.

von A. B. (Gast)


Angehängte Dateien:

Lesenswert?

Wenn es einfach sein soll und kompakt so geht das auch mit
**********************************************************
AVRStudio 4.19
avr-gcc-9.1.0-x64-mingw\bin\avr-g++.exe
avr-gcc-9.1.0-x64-mingw\bin\make.exe

mit -std_c++2a -fconcepts

Das generierte Makefile als Beispiel angeheftet...

--------------------------------------------------------
(Sinngemäss und moderner auch mit AtmelStudio 6.2 und 7)

von Matthias W. (matt007)


Lesenswert?

A. B. schrieb:
> Das generierte Makefile als Beispiel angeheftet...

vielen Dank !

von Matthias W. (matt007)


Lesenswert?

nun soll ein ATmega4809 mit WinAVR genutzt werden. Erst mal soll eine 
LED blinken.

das selbst zusammengebastelte WINAVR auf Basis 
avr8-gnu-toolchain-3.6.2.1759-win32.any.x86.zip liefert den Fehler:
avr-gcc.exe: error: device-specs/specs-atmega4809: No such file or 
directory.

es fehlt etwas. Wie kann ich das brauchbar hinzufügen?

es gibt das MegaCoreX-master.zip Paket, das die Arduino-Umgebung 
befähigt. Nur wie kann man das brauchbar in WINAVR integrieren?

wer kann/will dazu etwas sagen?

Gruss
Matthias

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Die Dateien sind im aktuellen Device Support Package enthalten

Atmel.ATmega_DFP.1.4.351.atpack http://packs.download.atmel.com

Veit D. hat eine Grafik erstellt, die genau zeigt wo die Dateien in die 
Toolchain eingepflegt werden.

Beitrag "Re: cannot read spec file 'device-specs/specs-atmega4808'"

von Veit D. (devil-elec)


Lesenswert?

Hallo,

ich habe mir erlaubt hier ein Update für alles zu liefern.  :-)
Beitrag "Re: Toochain bauen avr-gcc-x.x mit binutils-2.34 funktioniert nicht"

von Matthias W. (matt007)


Lesenswert?

A. B. schrieb:
> Atmel.ATmega_DFP.1.4.351.atpack http://packs.download.atmel.com
> Veit D. hat eine Grafik erstellt,

vielen Dank an Euch beide. Ich werde es versuchen !

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> hier ein Update für alles zu liefern.

Vielen Dank !

von Peter D. (peda)


Lesenswert?

Ich habe ganz einfach das Atmel Studio 7 installiert, da ist alles 
dabei.
Dann in den Userpfad von W10 die Verzeichnisse von AVR-GCC und Make 
eintragen, fertig.
Die Pfade kriegt man raus, indem man nach avr-gcc.exe und make.exe 
sucht.
Ich hab mir auch eine Batch geschrieben, die aus allen *.c im aktuellen 
Verzeichnis ein make erzeugt.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

was meinst du mit "Userpfad" genau? C:\Users\Name\...  ?
Ich kopiere entweder kleine DOS Tools u.ä. nach C:\Windows\ damit sie 
global gefunden werden oder ich mach einen Pfadeintrag in die 
Systemumgebungsvariablen.

von Matthias W. (matt007)


Lesenswert?

Matthias W. schrieb:
> vielen Dank an Euch beide. Ich werde es versuchen !

auf Basis des erstellten WinAVR mit der 9.1.0 habe ich den Atmega4809 
entsprechend Veits Hinweisen hinzugefügt. Das main.c definiert die Pins, 
so wie ich es bei den anderen AVRs stets gemacht hatte. An Port PF5 
hängt die LED die blinken soll.
1
// DDRF Pins teilweise auf Eingabe: kein PF7
2
DDRF = (0<<DDF6) | (1<<DDF5) | (0<<DDF4) | (0<<DDF3) | (0<<DDF2) | (0<<DDF1) | (0<<DDF0);
3
// PORTF pullup enable fuer Eingänge: kein PF7
4
PORTF = (1<<PF6) | (0<<PF5) | (1<<PF4) | (1<<PF3) | (1<<PF2) | (1<<PF1) | (1<<PF0);

mit diesen Zeilen in einer Schleife sollte die LED blinken:
1
sbi(PORTF,5);    // LED ein - LED gg. GND
2
delay_ms(1000);  // warte
3
cbi(PORTF,5);    // LED aus
4
delay_ms(1000);  // warte

Der Compiler findet das chip nun - bemängelt jedoch die bisher üblichen 
Hinweise auf die Portpins:
error: PC7 undeclared
error: PC6 undeclared
error: DDRD undeclared
error: DDD7 undeclared usw.

wenn man iom4809.h mit iom328p.h vergleicht sieht man dass das alles 
ganz anders aufgebaut ist. So einfach übernehmen kann man altes da 
nicht.

von Matthias W. (matt007)


Lesenswert?

A. B. schrieb:
> Veit D. hat eine Grafik erstellt, die genau zeigt wo die Dateien in die
> Toolchain eingepflegt werden

danke Veit ! das hat mir beim Hinzufügen des Atmega4809 in die 9.1.0 
sehr geholfen.

nur gibt es ein Problem beim alten WINAVR2010.

Die Datei specs-atmega4809 aus gcc/dev/atmega4809/device-specs sollte 
nach lib/gcc/avr/9.1.0/device-specs kopiert werden. Das alte Paket hat 
einen Ordner lib/gcc/avr/4.33. Darunter ist jedoch kein Ordner 
device_specs. Es gibt Ordner wie avr3, avr4,... avrxmega2, avrxmega3, 
avrxmega5,...

es ist unklar wo specs-atmega4809 nun hin soll?

die anderen Änderungen scheinen machbar.

: Bearbeitet durch User
von A. B. (Gast)


Lesenswert?

Matthias W. schrieb:
***************************************
> wenn man iom4809.h mit iom328p.h vergleicht sieht man dass das alles
> ganz anders aufgebaut ist. So einfach übernehmen kann man altes da
> nicht.

Das ist korrekt. ATmega-Series0 ist eine neue Generation AVR-uC.
***************************************************************
Das datasheet und viele application-notes gibt es hier:
https://www.microchip.com/wwwproducts/en/ATMEGA4809

Ein einfaches uart-Beispiel gibt es hier:
https://www.avrfreaks.net/forum/cant-get-uart-comm-going-nano-curiosity-w-mega4809

Matthias W. schrieb:
***************************************
> nur gibt es ein Problem beim alten WINAVR2010.

Du hast doch avr-gcc-9.1.0 und mit den beschriebenen Modifikationen ist 
das eine taugliche Toolchain für ATmega4809. Vergiss den WinAvr von 
2010.

Falls Du Probleme mit Makefiles hast: AtmelStudio generiert die 
Makefiles automatisch und kann die neueste verfügbare AVR-GCC-Toolchain 
verwenden.

Falls du eine einfachere IDE bevorzugst: Auch AVRStudio 4.19 generiert 
die Makefiles automatisch und kann die neueste verfügbare 
AVR-GCC-Toolchain verwenden. 
Beitrag "Re: Update von WinAVR2010"

Sowohl im AtmelStudio als auch in der Windows-Version der 
AVR-GCC-Toolchain von https://blog.zakkemble.net/avr-gcc-builds/ ist ein 
MAKE enthalten

von Matthias W. (matt007)


Lesenswert?

A. B. schrieb:
> Das datasheet und viele application-notes gibt es hier:
> https://www.microchip.com/wwwproducts/en/ATMEGA4809
> Ein einfaches uart-Beispiel gibt es hier:
> 
https://www.avrfreaks.net/forum/cant-get-uart-comm-going-nano-curiosity-w-mega4809

vielen Dank für diese beiden wertvollen Links ! das schau ich an.

von Matthias W. (matt007)


Lesenswert?

A. B. schrieb:
> Vergiss den WinAvr von 2010.

WinAVR 2010 ist alt - ich weiß. Daher habe ich mehrere WINAVR parallel 
aufgebaut. Der alte WinAVR liefert bisher den kleinsten Code, daher 
möchte ich das ggf. nutzen können - neben avr-gcc-9.1.0 und anderen.

von Veit D. (devil-elec)


Lesenswert?

Matthias W. schrieb:
> Die Datei specs-atmega4809 aus gcc/dev/atmega4809/device-specs sollte
> nach lib/gcc/avr/9.1.0/device-specs kopiert werden. Das alte Paket hat
> einen Ordner lib/gcc/avr/4.33. Darunter ist jedoch kein Ordner
> device_specs. Es gibt Ordner wie avr3, avr4,... avrxmega2, avrxmega3,
> avrxmega5,...

Also, eine alte 4.x Toolchain habe ich nicht, baue ich mir auch nicht.
Ich kann dir "nur" sagen wie du die fehlenden Dateien einer frischen 
Toolchain hinzufügst, aus dem Devicepack. Bspw.:
1
Datei: iom4809.h
2
von:  .\Atmel.ATmega_DFP.1.4.351.atpack\include\avr\
3
nach: .\avr-gcc-9.3.0\avr\include\avr\
4
5
Dateien: crt*.o und lib*.a
6
von:  .\Atmel.ATmega_DFP.1.4.351.atpack\gcc\dev\atmega4809\avrxmega3\
7
nach: .\avr-gcc-9.3.0\avr\lib\avrxmega3\
8
9
Datei: specs-atmega4809
10
von:  .\Atmel.ATmega_DFP.1.4.351.atpack\gcc\dev\atmega4809\device-specs\
11
nach: .\avr-gcc-9.3.0\lib\gcc\avr\9.3.0\device-specs\

Falls es mit dem spec File Probleme gibt, ich hatte damals ein Problem 
damit, kannste noch das von Johann probieren.
Beitrag "Re: cannot read spec file 'device-specs/specs-atmega4808'"

Mehr kann ich dazu nicht mehr sagen. Dann sollte dann funktionieren. Ich 
könnte dir höchstens noch eine avr-gcc 7.5 Toolchain anbieten mit allen 
drin.

Und wegen kleinsten Code. Sollte ja nun beim 4809 kein Thema sein, auch 
wenn es ein paar Byte hier und da mehr werden.  :-)

: Bearbeitet durch User
von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> Ich kann dir "nur" sagen wie du die fehlenden Dateien einer frischen
> Toolchain hinzufügst, aus dem Devicepack. Bspw.:

vielen Dank Veit, so habe ich das ja auch gemacht. Nur gibt es beim 
WINAVR 2010 den Ordner device-specs\ nicht. Daher weiß ich nicht wohin 
ich diese Datei kopieren soll.

wenn es nicht geht mit dem 4.3.3. dann geht es eben nicht.

von Peter D. (peda)


Lesenswert?

Veit D. schrieb:
> ich mach einen Pfadeintrag in die
> Systemumgebungsvariablen.

Die sind in der Regel grau, d.h. vom Benutzer nicht änderbar.
Mit Userpfad meine ich den "Path" unter Benutzervariablen.

Mist, ich sehe gerade, die Einstellung ist seit irgendeinem Update nicht 
mehr direkt verfügbar.
Man muß erst in der Suche nach "Umgebungsvariablen" suchen.
Was soll der Quatsch?

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> Ich könnte dir höchstens noch eine avr-gcc 7.5 Toolchain anbieten.

ich kann es probieren. Hast Du einen Link dazu?

ich kann das auch zusammenbauen wie die anderen davor wenn es ein zip 
gibt für Download.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

frisch montiert, weil ich weg muss leider ungetestet.
Versuche mal dein Glück.
https://www.dropbox.com/sh/bhz67ip1k3wj3eq/AAAb9WQ33hhNIqru2FRnWc8Ra?dl=0
(lösche ich wieder)

von Veit D. (devil-elec)


Lesenswert?

Hallo,

habe die 7.5 jetzt getestet, funktioniert leider nicht. :-(  Ich kann 
machen was ich will, ich erhalte immer:
unknown core architecture 'avrxmega3' specified with '-mmcu='
Da bin ich ehrlich gesagt überfragt wie man der die xmega3 Architektur 
beibringt das sie da ist. Den Ordner gabs hier übrigens nicht. Habe ich 
selbst eingefügt. Das macht mich jetzt auch etwas stutzig.

Als letzten Ausweg kann ich dir meine wirklich funktionierende 9.3.0 
Toolchain geben. Mit der programmiere ich schon länger auch mit 
ATmega4809. Habe ich mit in den Download Ordner kopiert.

Mit älteren Toolchains wie 9.1 hatte ich mit den neuen ATmegas bis jetzt 
auch noch nichts probiert. Ich dachte nicht das es da Probleme gibt. 
Entschuldigung.

Edit:
Ich glaube es macht wohl nun doch einen großen Unterschied ob man "nur" 
fehlende Devices hinzufügt wenn die Architektur der Toolchain schon 
bekannt ist oder sie diese generell noch nicht kennt. Ich denke bei 
Letzterem muss man beim Toolchain bauen andere Optionen bzw. größere 
Änderungen vornehmen. Sagt mir jetzt so mein Bauchgefühl.

Ich hoffe du bist mit der 9.3 glücklich. Ansonsten kann ich dir noch die 
"Rohvariante" einer avr-gcc 8.4.0 Toolchain geben. Die hat den Stand 
"frisch kompiliert". Also da sind noch keine fehlenden Dateien 
hinzugefügt. Es existieren aber die Ordner 'avrxmega3', was hoffen läßt 
das es damit funktioniert, falls du ein paar Byte Codegröße einsparen 
möchtest. Ich kopiere die mit in den Downloadordner. Die fehlenden 
Dateien kannste bestimmt selbst einsortieren. Das sollte wirklich nach 
der weiter oben beschriebenen Methode funktionieren.

: Bearbeitet durch User
von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> habe die 7.5 jetzt getestet, funktioniert leider nicht.

schade. Hast Du einen Link zur Rohversion?
dann kann ich das auch mal versuchen.

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> Mit älteren Toolchains wie 9.1 hatte ich mit den neuen ATmegas bis jetzt
> auch noch nichts probiert.

die 9.1.0 geht bei mir. Die machte halt den größten Code.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

dann wirst du Toolchainbauer.
https://gcc.gnu.org/
Dort findest du dann auch alle älteren gcc Versionen.
Viel Spass beim bauen.

Was ich noch in einem Forum gefunden habe ist folgender Hinweis.

In order to add the architecture, three things need to be updated,
gcc - gcc\config\avr\avr.c, gcc\config\avr\avr.h, gcc\config\avr\t-avr,
Binutils - gas\tc-avr.c
avr-libc - avr\io.h, configure, configure.in, And Header file changes.

von Carl D. (jcw2)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> dann wirst du Toolchainbauer.
> https://gcc.gnu.org/
> Dort findest du dann auch alle älteren gcc Versionen.
> Viel Spass beim bauen.
>
> Was ich noch in einem Forum gefunden habe ist folgender Hinweis.
>
> In order to add the architecture, three things need to be updated,
> gcc - gcc\config\avr\avr.c, gcc\config\avr\avr.h, gcc\config\avr\t-avr,
> Binutils - gas\tc-avr.c
> avr-libc - avr\io.h, configure, configure.in, And Header file changes.

Für das Bauen der avr-Toolchain (suche:avr-gcc from Source) gibt es gute 
Anleitung mit für alle Teile. Die hab ich in ein scipt verpackt und muß 
eigentlich nur noch die gewünschte Version(en) angeben, dann holt das 
Ding alles nötige aus dem Web und spuckt hinten die Toolchain raus. Nach 
gebührender Wartezeit.
Das einzige Problem ist das Win in WinAVR. Seit ich das abgelegt hab, 
brauch ich keine fremde Hilfe mehr für neue Versionen.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

kannst du auch älteren gcc Versionen neuere Architekturen beibringen?

von Carl D. (jcw2)


Lesenswert?

Veit D. schrieb:
> Hallo,
>
> kannst du auch älteren gcc Versionen neuere Architekturen beibringen?

Das wäre ein "Down-Port" und das einzige was ich mache ist ein 
"Download".

Nein, dazu müßte man an der GCC-Source rumfummeln, zumindest wenn es 
sich um neue Varianten handelt, die die Code-Generierung beeinflussen.
Einfach ein neuer Typ mit mehr Speicher/zusätzlichen Io-Registern würde 
eventuell mit AVRLibc Änderungen auskommen, die aber WIMRE von Jörg W. 
regelmäßig in AVRLibc Trunk ergänzt werden. Bisher verwende ich aber nur 
die latest Release, die aber schon Jährchen auf dem Buckel hat. Bin aber 
μC-mäßig nur Bastler, der nicht jedem neuen Chip hinterherhechelt.

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

Schade, denn das wäre das was Matthias machen müßte, einen Down-Port wie 
du das nennst.

von Matthias W. (matt007)


Angehängte Dateien:

Lesenswert?

das Beispiel LED-Blinken liefert mit der 9.1.0 nun keine Compilerfehler 
mehr, dafür meckert der Linker - siehe Bild. Dabei sollte der AVR-Kern 
doch derselbe sein?

vielleicht hat jemand einen Hinweis wie das gelöst werden kann?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Matthias W. schrieb:
> Nur gibt es beim WINAVR 2010 den Ordner device-specs\ nicht.

Korrekt.  Spec Files wurden mitr v5 eingeführt; WinAVR von 2010 ist v4.3 
also 7 Releases davor.

Veit D. schrieb:
> habe die 7.5 jetzt getestet, funktioniert leider nicht. :-(  Ich kann
> machen was ich will, ich erhalte immer:
> unknown core architecture 'avrxmega3' specified with '-mmcu='

avrxmega3 hab ich in v8 eingebaut.  Dass muss(te) im Compiler selbst 
gemacht werden, per Spec-File geht das nicht.  Du kannst aber deine 
Spec-Files auf avrxmega2 umschreiben — sollte funktionieren allerdings 
nicht so performant wie mit v8+.

> Ich glaube es macht wohl nun doch einen großen Unterschied ob man "nur"
> fehlende Devices hinzufügt wenn die Architektur der Toolchain schon
> bekannt ist oder sie diese generell noch nicht kennt. Ich denke bei
> Letzterem muss man beim Toolchain bauen andere Optionen bzw. größere
> Änderungen vornehmen. Sagt mir jetzt so mein Bauchgefühl.

+1 für männliche Intuition.

> Ich hoffe du bist mit der 9.3 glücklich. Ansonsten kann ich dir noch die
> "Rohvariante" einer avr-gcc 8.4.0 Toolchain geben. Die hat den Stand
> "frisch kompiliert". Also da sind noch keine fehlenden Dateien
> hinzugefügt.

Wenn man avrxmage3 will, also 0-Series wie ATmega4808, bekommt man den 
besten Code mit v8.  Neurer Versionen machen schlechteren Code, siehe 
PR90706.

Toolchains mit 0-Series Support sind da:

https://sourceforge.net/projects/mobilechessboar/files/avr-gcc%20snapshots%20(Win32)/

Alternativ Toolchains von µchip, da ich die nicht verwende kann ich aber 
nix zu der benötiogten (Mindest-)Version sagen.

> Es existieren aber die Ordner 'avrxmega3',

Ab v10 gibt es auch -nodevicespecs was Hinzufügen neuer Spec-Files 
vereinfacht:

http://gcc.gnu.org/gcc-10/changes.html#avr
http://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html#index-nodevicespecs

von Matthias W. (matt007)


Lesenswert?

Johann L. schrieb:
> avrxmega3 hab ich in v8 eingebaut.  Dass muss(te) im Compiler selbst
> gemacht werden, per Spec-File geht das nicht.

ok. Könnte ich so etwas nutzen?

> Wenn man avrxmega3 will, also 0-Series wie ATmega4808, bekommt man den
> besten Code mit v8.  Neurer Versionen machen schlechteren Code, siehe
> PR90706.

Danke für den Hinweis Johann !

> Toolchains mit 0-Series Support sind da

ok. Ich schau mal.

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> dann wirst du Toolchainbauer.
> https://gcc.gnu.org/
> Dort findest du dann auch alle älteren gcc Versionen.

das wollte ich eher nicht werden. Mein Ziel ist es etwas einfach 
benutzbares brauchbares zu haben das sicher und performant läuft und 
effizienten Code liefert.

dafür bin ich auch bereit mal einer brauchbaren Anleitung zu folgen wie 
man so eine Version zusammenbaut.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

@ Johann:
Danke für die Antwort, erklärt vieles ...  :-)

@ Matthias:
War so frei und habe dir die aktuelle 8.4er fertig gemacht. Ist in Atmel 
Studio 7 mit ATmega4809 getestet. Funktioniert. 
https://www.dropbox.com/sh/tsz1w39xkkzpu4q/AAAgwXS1DYdR2RKB0ZFM_hV9a?dl=0
Brauchbare Anleitungen hattest du übrigens bekommen, sogar mit einfachen 
.bat Datei doppelklicken. Darüber musste dich jetzt nicht beschweren.

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> Darüber musste dich jetzt nicht beschweren.

ich beschwer mich ja gar nicht ! Danke Veit !

von Matthias W. (matt007)


Lesenswert?

Veit D. schrieb:
> War so frei und habe dir die aktuelle 8.4er fertig gemacht. Ist in Atmel
> Studio 7 mit ATmega4809 getestet. Funktioniert.

vielen Dank Veit. Ich probier es aus.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Ich hab mir auch eine Batch geschrieben, die aus allen *.c im aktuellen
> Verzeichnis ein make erzeugt.

Danke Peter für den Hinweis. Kannst/willst Du das hier posten?

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

Siehe Anhang.

von Matthias W. (matt007)


Lesenswert?

Peter D. schrieb:
> Siehe Anhang.

Danke Peter, sieht schön kompakt aus.

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.