Forum: Compiler & IDEs AS7 avr-gcc updaten ?


von Veit D. (devil-elec)


Lesenswert?

Hallo,

mich treibt immer noch das Problem um wie ich eine aktuelle avr-gcc 
Version meinem Atmel Studio 7 verfügbar mache.

diese gut gemeinte Beschreibung funktioniert nicht.
1
Die Toolchain avr-gcc-8.0_2017-07-19_mingw32 ist verfügbar unter:
2
****************************************************************
3
https://sourceforge.net/projects/mobilechessboar/f...
4
5
Package Name und Package Base Path in AtmelStudio eintragen
6
***********************************************************
7
SolutionExplorer | Project: rechte Maustaste: Propreties | Advanced | 
8
Link: Tools>Options>Toolchain>FlavourConfiguration | 
9
Atmel-8Bit-CPP-language | Package Name und Package Base Path eintragen.
10
11
12
Package in AtmelStudio auswählen
13
********************************
14
SolutionExplorer | Project: rechte Maustaste: Propreties | Advanced | 
15
Toolchain Flavour | neue Toolchain auswählen.

Auch habe ich es mit anderen fertigen Paketen versucht.
http://blog.zakkemble.co.uk/avr-gcc-builds/
https://sourceforge.net/projects/mobilechessboar/files/avr-gcc%20snapshots%20(Win32)/

Habe immer entpackt und auf den Ordner verwiesen der über den avr, bin, 
include usw liegt.

Mit leeren Projekt immer "recipe for target 'main.o' failed"

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Schon mal bin versucht?

von MitLeserin (Gast)


Lesenswert?

Veit D. schrieb:
> Package Name und Package Base Path in AtmelStudio eintragen
> ***********************************************************
> SolutionExplorer | Project: rechte Maustaste: Propreties | Advanced |
> Link: Tools>Options>Toolchain>FlavourConfiguration |
> Atmel-8Bit-CPP-language | Package Name und Package Base Path eintragen.

mein Pfad:
*********
C:\Atmel_Toolchain\AVR8_GCC\avr-gcc-8.0_2017-07-19_mingw32\bin


.. sinngemäss anpassen sollte funktionieren.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

mit dem Pfad auf .../bin  kompiliert es zwar fehlerfrei, zeigt aber 0% 
und 0Byte RAM/Flash Belegung an. Kann noch nicht richtig sein.

von Jim M. (turboj)


Lesenswert?

Veit D. schrieb:
> mit dem Pfad auf .../bin  kompiliert es zwar fehlerfrei, zeigt aber 0%
> und 0Byte RAM/Flash Belegung an. Kann noch nicht richtig sein.

Da ist vermutlich das Linker Skript kaputt oder passt nicht zum Code.

von Apollo M. (Firma: @home) (majortom)


Angehängte Dateien:

Lesenswert?

hi,
ich verwende ganz einfach zwei versionen parallel, last 5.x und 7.x, via 
button/external tools und den zwei attached cmd's

damit code size richtig erscheint habe ich von version 5.x die 
avr_size/objcopy/objdump rüber kopiert, es gibt aber ein problem, im 
simulator/debugger werden nicht alle symbol infos richtig angezeigt.

ich benutze die 7.x zu mindest als letzten size/speed optimierungsstep!


mt

von Veit D. (devil-elec)


Lesenswert?

Hallo,

vielen Dank für die Informationen. Es tut sich was zum guten ...

Ich habe mit vier Versionen probiert, 6.4.1, 7.1.1, 7.2.0 und 8.0, alle 
scheinen zu kompilieren, keine Fehler/Warnungen, aber Speicheranzeige 0.

Nachdem Datei austauschen Tipp muss man nur die alte (von AS) 
"avr-size.exe" in den neuen avr-gcc Pfad ...\bin  reinkopieren/ersetzen. 
Danach funktioniert die Speicheranzeige. Ob die allerdings stimmt, da 
bin ich mir nicht so sicher. Denn eine "avr-size.exe" ist ja in den 
neuen Paketen vorhanden und hat eine andere Dateigröße. Funktioniert nur 
nicht, warum auch immer.

bei mir von:
C:\Program Files 
(x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin

Dann habe ich mal rumgespielt und verstehe den Mechanismus dahinter noch 
nicht wirklich. Einmal konnte ich zwischen den toolchains wechseln und 
der Flashverbrauch änderte sich. Danach anderes Projekt, wieder 
gewechselt und Flashverbrauch änderte sich nicht.

Nur die RAM Verbrauchsanzeige blieb immer konstant.

Kann man nun zwischendurch die Toolchain Versionen ändern oder bleibt 
die für immer konstant mit der Version mit der man sein Projekt neu 
erstellt hatte? Irgendwas widerspricht sich.

Sind die neueren Versionen schon für höhere C++ Version wie 14 oder 17 
voreingestellt oder muss man dafür noch Optionen setzen? Ich finde die 
Übersichtsseite nicht mehr.

Und was hat es mit dem "GDB" auf sich? Was ist das und wofür? Weil der 
Pfadeintrag ist tot nach toolchain Version Änderung. Irgendwas zum 
debuggen muss das sein.

von MitLeserin (Gast)


Lesenswert?

Mit der Kommandozeile aufgerufen liefern alle avr-size.exe der 
jeweiligen Toolchains für ein beispiel.elf die entspechenden Angaben.

Mit Atmel-Studio aufgerufen liefert die Toolchain Native und die 
Toolchain avr8-gnu-Toolchain-3.5.0.85 mit

Using "RunOutputFileVerifyTask" task from assembly 
"C:\Atmel7\7.0\Extensions\Application\AvrGCC.dll".
Task "RunOutputFileVerifyTask"

Program Memory Usage   :  62 bytes   0.8 % Full
Data Memory Usage     :  0 bytes   0.0 % Full

die selben Resultate wie avr-size aus Kommandozeile.


Mit Toolchain avr-gcc-7.1.1_2017-07-27_mingw32 und mit Toolchain 
avr-gcc-8.0_2017-07-19_mingw32 aufgerufen liefert

Using "RunOutputFileVerifyTask" task from assembly 
"C:\Atmel7\7.0\Extensions\Application\AvrGCC.dll".
Task "RunOutputFileVerifyTask"

Program Memory Usage :  0 bytes   0.0 % Full
Data Memory Usage :  0 bytes   0.0 % Full

von Oliver S. (oliverso)


Lesenswert?

Welche avr-size Version bei einem Aufruf ohne vollständige Pfadabgabe 
aufgerufen werden, hängt von den eingestellten Pfaden im System ab.

Oliver

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

> Kann man nun zwischendurch die Toolchain Versionen ändern oder bleibt
> die für immer konstant mit der Version mit der man sein Projekt neu
> erstellt hatte?

ich kann jederzeit mit einen mausklick wechseln, dann wird immer nur der 
link zum tool verzeichnis gewechselt. geht aber nur, wenn atmelstudio 
als admin gestartet wird, da mklink die rechte braucht.
die toolchain optionen bleiben aber gleich, wenn andere optionen auch 
gewünscht sind, dann über unterschiedliche solution configuration, like 
debug/production/size/speed/...

unter gcc 7.2, stimmt bei mir die code/ram size immer und
default C++ language dialect options is ‘-std=gnu++14’.

mt

von MitLeserin (Gast)


Lesenswert?

Veit D. schrieb:
> Kann man nun zwischendurch die Toolchain Versionen ändern oder bleibt
> die für immer konstant mit der Version mit der man sein Projekt neu
> erstellt hatte? Irgendwas widerspricht sich.

Toolchain kann mit | Properties | Advanced | Toolchain Flavour | sehr 
einfach ausgewählt werden.

Properties Seite abspeichern ( oder automatisch abspeichern lassen )

Mit | Build | Rebuild Solution |  die Output Daten löschen und neu 
erstellen lassen.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Nachdem Datei austauschen Tipp muss man nur die alte (von AS)
> "avr-size.exe" in den neuen avr-gcc Pfad ...\bin  reinkopieren/ersetzen.
> Danach funktioniert die Speicheranzeige. Ob die allerdings stimmt, da
> bin ich mir nicht so sicher. Denn eine "avr-size.exe" ist ja in den
> neuen Paketen vorhanden und hat eine andere Dateigröße. Funktioniert nur
> nicht, warum auch immer.

Die alte avr-size (z.B. aus WinAVR) enthält zur Anzeige der Größe einen 
üblen Hack.  So übel, dass es der Hack nie in die offizielle Versiob 
geschafft hat.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

an das Rebuild Solution hatte ich nicht gedacht, funktioniert.

Habe dann auch nochmal die gcc 7.2 von zakkemble mit der Arduino IDE 
probiert, laut Beschreibung soll das funktionieren. Geht auch nicht. 
Angeblich fehlt in \bin die avr-g++. Sie liegt aber genau da wo sie sein 
soll.

Wenigstens läuft jetzt AS mit neuer Version.

Warum die alte avr-size ein Hack sein soll verstehe ich nicht. Glaube 
kaum das Atmel daran "rumgepfutscht" hat.

Danke @ all.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Veit D. schrieb:
> Warum die alte avr-size ein Hack sein soll verstehe ich nicht.

Die Änderung wurde von den Binutils-Maintainern abgelehnt (und würde es 
auch heute noch werden), kam also nie in eine offizielle Release (es sei 
denn als inoffizieller Patch auf eine Release).

> Glaube kaum das Atmel daran "rumgepfutscht" hat.

Irgendwann hat Atmel dann einen 2ten Ansatz gestartet: Anstatt die 
komplette Device-Info — immerhin >> 200 Devices — neben in avr-libc, 
Compiler auch in Binutils reinzukloppen, würde folgender Ansatz gewählt:

Dort, wo die Device-Info verfügbar ist (avr-libc) wird sie in eine 
eigens dafür vorgesehene .note-Section eingetragen, und zwar im 
Startup-Code:

http://svn.savannah.nongnu.org/viewvc/avr-libc/trunk/avr-libc/crt1/gcrt1.S?view=markup&pathrev=2519#l306

Da quasi alle Anwendungen diesen Startup-Code verwenden, ist die Info 
also prinzipiell verfügbar.  Beispiel: Ein simples Programm mit 
-mmcu=atmega8 übersetzt und dann
1
$ avr-objdump -s -j .note.gnu.avr.deviceinfo a.elf
2
3
a.elf:     file format elf32-avr
4
5
Contents of section .note.gnu.avr.deviceinfo:
6
 0000 04000000 2a000000 01000000 41565200  ....*.......AVR.
7
 0010 00000000 00200000 60000000 00040000  ..... ..`.......
8
 0020 00000000 00020000 08000000 01000000  ................
9
 0030 0061746d 65676138 00000000           .atmega8....
Damit ist das Zeug prinzipell in avr-size verfügbar, ohne avr-size zu 
hacken.

So weit, so gut.  Wie's dann weitergeht? Keine Ahnung.  Frag Atmel :-)

: Bearbeitet durch User
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.