Forum: Compiler & IDEs Fehler bei avr-gcc 4.8.1 und nicht bei 4.3.3


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Andreas (ah3112)


Lesenswert?

Hallo,

ich habe mir das ucos-ii für verschiedene Controller portiert. Momentan 
teste ich das mit dem ATMega2560. Da ich schon seit Jahren mit winavr 
bestens klar komme, habe ich bei mir das immer noch installiert. Da die 
Software auf dem Atmega2560 erst nicht lief, habe ich das auch mit 
ATmel-Studio compiliert. Mittlerweile läuft sie einwandfrei wenn ich das 
mit dem avr-gcc 4.3.3 compiliere und dann ins STK600 überspiele.

Compiliere ich das mit dem avr-gcc aus dem Atmel-Studio, läuft die 
Software nicht im STK600. Es ist nicht nur exakt derselbe Quellcode 
sondern auch dieselben Dateien.

Um auszuschliessen, dass es an Atmel-Studio liegt, habe ich mir eine 
Batch-Datei geschrieben, wo die einzelnen Dateien separat compiliert und 
gelinkt werden. Dies jeweis für den avr-gcc 4.3.3 als auch 4.8.1.

Es ist in den Batch-Dateien alles identisch. Nur der jeweilige Compiler 
wird aus unterschiedlichen Pfaden aufgerufen. Aber die Compiler- und 
Linkeroptionen sind zu 100% identisch.

Hat jemande eine Idee, woran das liegen könnte? Oder habe ich sonst eine 
Möglichkeit herauszufinden, wo die erzeugten Dateien unterschiedlich 
sind. Ich habe das schon über die "lss"-Datei versucht. Aber da komme 
ich nicht weiter.

Von beiden Compilern habe ich mal die Versionen anzeigen lassen und das 
Ergebnis unten eingefügt.

Vorab schon mal Danke für eine Antwort.

Viele Grüße

avr-gcc.exe (AVR_8_bit_GNU_Toolchain_3.4.5_1522) 4.8.1
Copyright (C) 2013 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.

avr-gcc (WinAVR 20100110) 4.3.3
Copyright (C) 2008 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.

von Oliver S. (oliverso)


Lesenswert?

In den unzähligen Versionen von AVR-gcc gibts tatsächlich welche, die 
Macken haben. Ob jetzt 4.8.1 dazugehört, ist unklar. Auf AVRfreaks gibt 
es zumindest Hinweise, das es so sein könnte.

Aktuell ist allerdings ja Version 14, da sollte es ausreichend viele 
andere außer 4.8.1 zur Auswahl geben.

Allerdings hat sich das Optimierungsverhalten der Compiler über die Zeit 
schon stark verändert, und mancher eigentlich fehlerhafter Code, der mit 
alten Compilern trotzdem lief, läuft mit neueren nicht mehr.

Also zeig mal den Code.

Andreas schrieb:
> Aber die Compiler- und
> Linkeroptionen sind zu 100% identisch.

Die zeig auch mal.

Oliver

: Bearbeitet durch User
von Vanye R. (vanye_rijan)


Lesenswert?

> der mit alten Compilern trotzdem lief, läuft mit neueren nicht mehr.

DAs ist das Problem! WEnn man glaubt einen Fehler zu haben dann sollte 
man seinen Debugger anwerfen und die genaue Stelle finden. In 99% der 
Faelle wird man dann sehen das man selber Unsinn programmiert hat und im 
restlichen 1% hat man dann wirklich einen Bug im Compiler gefunden an 
dessen Behebung man mitwirken kann.

Vanye

von Andreas (ah3112)


Lesenswert?

Danke erstmal für Eure Antworten.

Oliver S. schrieb:
> Aktuell ist allerdings ja Version 14
Meinst Du von dieser Webseite: 
https://blog.zakkemble.net/avr-gcc-builds/ ?
Da habe ich irgendwo im Internet gelesen, dass der Compiler von dieser 
Webseite ziemlich aufgeblähten Code liefert. Ich weiss aber im Moment 
nicht mehr wo ich das gelesen habe.

Oliver S. schrieb:
> mancher eigentlich fehlerhafter Code, der mit
> alten Compilern trotzdem lief, läuft mit neueren nicht mehr.
Das kann ich mir nur schwer vorstellen, bzw. ist für mich nicht 
nachvollziehbar. Der eigentliche ucos-source wurde auf zahlreichen 
Controllern portiert und ist in ANSI-C geschrieben. Die Portierung für 
den avr-gcc wurde bereits 2001 von Ole Saether und 2003 von Julius 
Luukko vorgenommen und ist auch bei mehreren Projekten im Internet zu 
finden. Ich habe lediglich die Timerinitialisierung für den AT90CAN128, 
ATMega162 und AT90S8515 geändert. Bei allen drei Controllern läuft es 
einwandfrei. Sowohl auf einem STK500 als auch STK200. Beim STK200 aber 
mit zusätzlichem RAM. Ausserdem ist es nur schwer nachzuvollziehen, dass 
der Code fehlerhaft sein soll, dann aber doch läuft.

Darüber hinaus läuft es im Simulator von AVR-Studio. Ich habe das zwar 
nocht nicht mit den Timeraufrufen getestet, aber zumindest ein Task wird 
angesprungen.

Oliver S. schrieb:
> Also zeig mal den Code.
Das sind über 10 Dateien. Da wird sich hier wohl kaum jemand 
durchquälen. Wie ich bereits geschrieben hatte, existiert der auch an 
zahlreichen Stellen im Internet.

Oliver S. schrieb:
>> Aber die Compiler- und
>> Linkeroptionen sind zu 100% identisch.
>
> Die zeig auch mal.
Hier mal der Compileraufruf für eine Datei:
1
avr-gcc.exe  -Wall -g2 -gstabs -Os -fpack-struct -fshort-enums -ffunction-sections -fdata-sections -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega2560 -DF_CPU=8000000UL -MMD -MP -MF"ucossource/os_core.d" -MT"ucossource/os_core.o" -c -o "ucossource/os_core.o" "../ucossource/os_core.c"

und hier der Linkeraufruf:
1
avr-gcc.exe   -Wl,--gc-sections -Wl,-Map,Multitasking.map -Wl,--gc-sections -mrelax -mmcu=atmega2560 -o "Multitasking.elf"  ./ucossource/os_core.o ./ucossource/os_flag.o ./ucossource/os_mbox.o ./ucossource/os_mem.o ./ucossource/os_mutex.o ./ucossource/os_q.o ./ucossource/os_sem.o ./ucossource/os_task.o ./ucossource/os_time.o  ./MTuart.o ./Main.o ./os_cpu_a.o ./os_cpu_c.o   -lm -lm

Die Batch-Datei für den Compiler von AVR-Studio ist identisch. Dort ist 
nur das avr-gcc.exe ersetzt durch:
1
"C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe"


Vanye R. schrieb:
> WEnn man glaubt einen Fehler zu haben dann sollte
> man seinen Debugger anwerfen und die genaue Stelle finden.
Habe ich gemacht. Und zwar lange bevor ich den Thread erstellt hatte. 
Wie ich bereits geschrieben habe, im AVR-Studio läuft es. Zumindest 
kommt die Software weiter als in der Hardware auf dem STK600.

Vanye R. schrieb:
> In 99% der
> Faelle wird man dann sehen das man selber Unsinn programmiert
Das kann wohl kaum sein, wenn die Software auf 4 Controllern mit dem 
avr-gcc 4.3.3 läuft. Dazu auch noch im Simulator von AVR-Studio.

Vanye R. schrieb:
> im
> restlichen 1% hat man dann wirklich einen Bug im Compiler gefunden an
> dessen Behebung man mitwirken kann.
Momentan gehe ich noch nicht einmal von einem Bug im Compiler aus 
sondern glaube eher, dass da irgendwas wegoptimiert oder anders 
umgesetzt wird. Dies würde ich gerne finden, wäre auch bereit mir den 
erzeugen Assemblercode anzusehen. Aber ich hatte das bereits über die 
lss-Datei versucht. Die ist aber von der Strukturierung dermassen anders 
bei beiden Compilern, dass mir das nicht möglich war. Daher hatte ich 
gehofft hier einen Tipp zu finden, wie ich das einfacher herausfinden 
kann.

Ich werde am Wochenende nochmal versuchen die Software für den 
AT90CAN128, den ATMega162 und AT90S8515 mit dem Compiler von AVR-Studio 
zu compilieren und gucken was dann rauskommt.

Wenn noch jemand eine andere Idee hat, wie ich die Unterschiede der 
erzeugen Hex-Dateien finden kann, wäre ich dankbar.

Viele Grüße

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Es ist nicht ausgeschlossen, dass ucos nen Bug hat.

Es ist nicht ausgeschlossen, dass die gcc Version nen Bug hat.

Da will man dann natürlich wissen, wo das Problem ist.  Wenn das Problem 
im eigenen Code / der eigenen Portierung ist, und man nimmt zur "Lösung" 
eine andere Compilerversion, dann hat man nix gewonnen, weil man früher 
oder später vom selben Artefakt wieder ins Hinterteil gezwickt wird.

Was ich nicht verstehe ist v4.8.1.  Die v4.8 Release Serie endet mit 
v4.8.5, warum also nicht diese nehmen, die im Vergleich zur ersteren 
ausschließlich Bugfixes enthält?

Die Problembeschreibung ist viel zu allgemein, um konkret Tipps geben zu 
können.  Also wie immer: Problem eingrenzen mit den üblichen mittels wie 
Debugging, Logging, Statische Analyse (z.B. generierten Code anschauen, 
mehr Warnings aktivieren), Code verkleineren / vereinfachen. etc.

Letzteres ist natürlich nur dann praktikabel, wenn die Unterschiede im 
erzeugten Code überschaubar sind -- was, wie du schreibst, nicht der 
Fall ist.  Also Problem weiter eingrenzen.

Und ist das Problem sporadisch? Tritt immer zur gleichen Zeit auf? 
Software stürzt sofort ab? etc

Einen großen Beitrag zum Delta zwischen lst Dateien sind 
unterschiedliche Code-Adressen: Eine Instruktion mehr oder weniger, und 
alle folgenden Adressen sind anders.  Hier kann es helfen, die lst 
vorher zu filtern, zB mit sed.

von Frank K. (fchk)


Lesenswert?

Das Argument mit 4.8.5 vs. 4.8.1 kann ich nachvollziehen.

Anderer Punkt: Was passiert denn bei -O0 anstelle -Os? Wenn es dann 
funktioniert, dann kannst Du das Problem schon auf eine Datei 
eingrenzen.

fchk

Beitrag #7761260 wurde von einem Moderator gelöscht.
von Frank K. (fchk)


Lesenswert?

Andreas schrieb:

>> Aktuell ist allerdings ja Version 14
> Meinst Du von dieser Webseite:
> https://blog.zakkemble.net/avr-gcc-builds/ ?
> Da habe ich irgendwo im Internet gelesen, dass der Compiler von dieser
> Webseite ziemlich aufgeblähten Code liefert. Ich weiss aber im Moment
> nicht mehr wo ich das gelesen habe.

Das ist wohl auch der Grund, warum Microchip selber bei 5.4.0 stehen 
geblieben ist. Neuere Versionen erzeugen weniger kompakten Code. Klar, 
gcc ist nicht für 8-Bit Architekturen designt, und das Hauptaugenmerk 
liegt auf  x86, arm, mips, risc-v, also alles 32/64 Bit Architekturen.

fchk

von Sherlock 🕵🏽‍♂️ (rubbel-die-katz)


Lesenswert?

Andreas schrieb:
> Da habe ich irgendwo im Internet gelesen, dass der Compiler von dieser
> Webseite ziemlich aufgeblähten Code liefert.

Kann ich bestätigen.

Hier ist noch eine Alternative zur Seite von ZAK: 
https://gnutoolchains.com/avr/

Die Version 5.3.0 (ab Windows XP) erzeugt den gewohnt kompakten Code. 
Bei der 7.3.0 (ab Windows 7) weiß ich es nicht.

Debian Linux ist bei Version 5.4.0 hängen geblieben.

: Bearbeitet durch User
von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Was ich nicht verstehe ist v4.8.1.
Weil ich den Compiler von AVR-Studio 6.2 genommen habe und dachte, der 
würde funktionieren.

Frank K. schrieb:
> Das Argument mit 4.8.5 vs. 4.8.1 kann ich nachvollziehen.
War mir nicht bekannt.

Ich habe hier noch einen Compiler von Sysprogs installiert, aber bisher 
nicht getestet. Am Wochenende werde ich mal ausprobieren, was dabei 
rauskommt.

Frank K. schrieb:
> Was passiert denn bei -O0 anstelle -Os? Wenn es dann funktioniert, dann
> kannst Du das Problem schon auf eine Datei eingrenzen.
Werde ich am Wochenende auch mal ausprobieren. Danke für den Tipp.

Sherlock 🕵🏽‍♂️ schrieb:
> Hier ist noch eine Alternative zur Seite von ZAK:
> https://gnutoolchains.com/avr/
Danke, den habe ich installiert. Da ich aber mit Eclipse und dem Plugin 
programmiere, war mir das bisher zu umständlich alles anzupassen. Aber 
am Wochenende werde ich das über die Batch-Datei testen.

Johann L. schrieb:
> Und ist das Problem sporadisch? Tritt immer zur gleichen Zeit auf?
> Software stürzt sofort ab? etc
Nein. Software läuft gar nicht an. Ich habe mir zum debuggen in der 
Interruptroutine 2 LEDs anzeigen lassen. Da sehe ich, dass da 
reingesprungen wird.

Johann L. schrieb:
> Letzteres ist natürlich nur dann praktikabel, wenn die Unterschiede im
> erzeugten Code überschaubar sind -- was, wie du schreibst, nicht der
> Fall ist.  Also Problem weiter eingrenzen.
Ich habe das über die lss-Datei versucht. Das war Wahnsinn und für mich 
unmöglich. Daher hatte ich mir erhofft hier einen Tipp tz bekommen, wie 
das einfacher geht.

Sofern in der Version, die ich bzw. das Atmel Studio verwendet, 
tatsächlich ein Bug ist, bringen auch alle Versuche damit nichts. Daher 
werde ich das am Wochenende mit anderen Versionen bzw. mit den 
Einstellungen O0 versuchen.

Das Ergebnis werde ich berichten. Bis dahin erstmal danke an alle.

von Oliver S. (oliverso)


Lesenswert?

Andreas schrieb:
> Ich habe das über die lss-Datei versucht.

Kannst du mal die beiden fertig compilieren elf-Dateien hier hochladen?

Und bitte auch den Sourcecode, zusammen gezippt. Oder auch das ganze 
Eclipse-Projektverzeichnis.

Oliver

von Andreas (ah3112)


Lesenswert?

Um das Problem näher einzugrenzen, habe ich die Software für den 
AT90CAN128 mit den Versionen avr-gcc 7.3.0 und 5.4.0 compiliert. Da 
läuft sie einwandfrei. Mit der Version 4.8.1 habe ich es noch nicht 
getestet.

Da ich das jetzt zum Anlass nehmen wollte mal auf die Version 7.3 
umzusteigen, habe ich versucht die Software für den ATMega162 zu 
compilieren. Dabei habe ich aber erhebliche Schwierigkeiten.

Damit das Ganze nicht zu unübersichtlich wird, habe ich dafür einen 
neuen Thread aufgemacht.

Sobald es hier was neues gibt, werde ich berichten.

Viele Grüße
Andreas

von Andreas (ah3112)


Lesenswert?

So, ich habe das Ganze in den letzen Tagen getestet und, wie meistens, 
sitzt der Fehler wohl vor dem Bildschirm.

Aber der Reihe nach.
Um den Fehler einzugrenzen habe ich mir die avr-Versionen 7.3.0, die 
avr-Version 5.4 und die Version von Sysprogs heruntergeladen. Wobei ich 
festgestellt hatte, dass die 7.3.0 identisch ist mit der von Sysprogs.

Ich hatte die Software schon seit längerem durch eine bedingte 
Compilierung auch für den AT90CAN128, den AT90S8515 und den ATMega162 
geändert. Dort liefen die auch einwandfrei. Daher wollte ich zunächst 
testen, ob das auf allen drei Controllern noch funktioniert. Während ich 
die Software für den ATMega2560 geändert hatte, fielen mir diverse Dinge 
bei den anderen Controllern auf, wo ich dachte, das könnte man 
verschönern. Natürlich ungetestet, wodurch sich das Ganze erstmal als 
eine Verschlimmbesserung herausstellte.

Daher hatte ich erstmal einiges an der Software wieder gerade biegen 
müssen, was mehrere Tage an Zeit in Anspruch genommen hatte. Dabei gab 
es auch diverse Probleme, wozu es auch einen separaten Thread 
Beitrag "section `.data' is not within region `data'" gibt.

Nachdem das dann auf den anderen Controllern lief, habe ich das auch für 
den ATMega2560 getestet. Auch dort läuft es jetzt einwandfrei.

Auch mit dem Compiler des Atmel-Studios (4.8.0) läuft es (bedingt) 
einwandfrei. Ich weiss definitiv, dass es, als der Thread von mir 
erstellt wurde, nicht lief. Es war exakt dieselbe Software. Wo der 
Fehler in der Software war, lässt sich jetzt nicht mehr nachvollziehen, 
da ich mir den Stand blöderweise nicht gesichert habe.

Allerdings bekomme ich bei der Version 4.8.0 immer eine Fehlermeldung in 
einer Interrupt-Routine: "Error 5 local frame unavailable (naked 
function?)"
Wenn ich den Funktionsaufruf in der Interrupt-Routine auskommentiere, 
kommt der Fehler nicht.   Diese Fehlermeldung bekomme ich weder bei der 
Version 5.4.0 noch bei 7.3.0. Dort funktioniert die Interrupt-Routine 
auch einwandfrei.

Oliver S. schrieb:
> Und bitte auch den Sourcecode, zusammen gezippt. Oder auch das ganze
> Eclipse-Projektverzeichnis.
Hätte ich gemacht. Aber wie ich geschrieben hatte, mussten ich meine 
ganzen Änderungen wieder erstmal auf einen vernünftigen Stand bringen, 
so dass es auf den anderen Controllern lief. Das wollte ich niemandem 
zumuten.

Danke an alle für den Aufwand und die Bemühungen. Ich werde das jetzt 
als Anlass nehmen und auf 7.3.0 umstellen.

von Harald K. (kirnbichler)


Lesenswert?

Andreas schrieb:
> So, ich habe das Ganze in den letzen Tagen getestet und, wie meistens,
> sitzt der Fehler wohl vor dem Bildschirm.

Hut ab für das öffentliche Eingeständnis. Menschen, die Fehler nicht nur 
machen, sondern auch dazu stehen, verdienen Respekt.

von Peter D. (peda)


Lesenswert?

Andreas schrieb:
> Um das Problem näher einzugrenzen, habe ich die Software für den
> AT90CAN128 mit den Versionen avr-gcc 7.3.0 und 5.4.0 compiliert. Da
> läuft sie einwandfrei.

Na dann ist doch alles in Butter.
Atmel Studio 7 bzw. Microchip Studio verwenden die 5.4.0.
Laß also die 4.8.1 in Frieden ruhen.
1
C:\Program Files (x86)\Atmel\Studio\7.0\toolchain\avr8\avr8-gnu-toolchain\bin>avr-gcc --version
2
avr-gcc (AVR_8_bit_GNU_Toolchain_3.6.2_1778) 5.4.0
3
Copyright (C) 2015 Free Software Foundation, Inc.
4
This is free software; see the source for copying conditions.  There is NO
5
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

von Andreas (ah3112)


Lesenswert?

Harald K. schrieb:
> Hut ab für das öffentliche Eingeständnis. Menschen, die Fehler nicht nur
> machen, sondern auch dazu stehen, verdienen Respekt.
Danke

Peter D. schrieb:
> Atmel Studio 7 bzw. Microchip Studio verwenden die 5.4.0.
> Laß also die 4.8.1 in Frieden ruhen.
Wäre schön, wenn Atmel Studio 7 bei mir laufen würde. Ich habe bestimmt 
schon 3 oder 4 mal versucht das bei mir zu installieren. Aber es wird 
immer abgebrochen mit irgendwelchen nicht näher bezeichneten 
Fehlermeldungungen. Als ich den avr-gcc 7.3.0 installiert hatte, habe 
ich auch Atmel Studio 7 nochmal installiert. In der Hoffnung, dass 
zumindest der aktuelle Compiler installiert wird und ich den von Hand 
aufrufen kann. War natürlich nichts. Der einzige Grund, warum ich die 
4.8.1 installiert habe, war der, dass sich Atmel Studio 6.2 (oder 6.1, 
das weiss ich gerade nicht, weil PC aus) installieren liess und die 4 
8.1 dazu gehören. Studio 6 kann ohne Fehler installiert und aufgerufen 
werden.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Wenn es nur um die Tools geht (avr-gcc + binutils + avr-libc), die hatte 
ich vor einiger Zeit mal für MinGW32 generiert:

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

Das neueste ist eine v8.0.1 (v10 würde ich nicht empfehlen). Wenn die 
v8.0.1 bei die läuft, könnte ich auch eine v8.5 generieren und 
hochladen.

Die Tools gibt's aber auch bei Microchip zum Download; weiß aber nicht 
welche Versionen es da gibt.

von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Wenn es nur um die Tools geht (avr-gcc + binutils + avr-libc), die hatte
> ich vor einiger Zeit mal für MinGW32 generiert:
Sind das die: 
https://sourceforge.net/projects/mobilechessboar/files/avr-gcc%20snapshots%20%28Win32%29/avr-gcc-10.0.0_2019-12-16_-mingw32.zip/download 
?
Falls ja, würde ich die in den nächsten Tagen mal installieren und das 
Ergebnis hier mitteilen.

Johann L. schrieb:
> Die Tools gibt's aber auch bei Microchip zum Download; weiß aber nicht
> welche Versionen es da gibt.
Meinst Du das hier: 
https://ww1.microchip.com/downloads/aemDocuments/documents/DEV/ProductDocuments/SoftwareTools/avr8-gnu-toolchain-3.7.0.1796-win32.any.x86_64.zip
Da meldet sich bei mir der Compiler mit 7.3.0. Aber dazu schrieb Jörg:
Jörg W. schrieb:
> Vermutlich Microchips mit privaten Patches zusammen gefrickelte
> Toolchain.

von Oliver S. (oliverso)


Lesenswert?

Andreas schrieb:
> Wäre schön, wenn Atmel Studio 7 bei mir laufen würde. Ich habe bestimmt
> schon 3 oder 4 mal versucht das bei mir zu installieren. Aber es wird
> immer abgebrochen mit irgendwelchen nicht näher bezeichneten
> Fehlermeldungungen.

Was unter einem handelsüblichen Windows 10 schon seltsam ist.

Oliver

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreas schrieb:
> Johann L. schrieb:
>> Wenn es nur um die Tools geht (avr-gcc + binutils + avr-libc), die hatte
>> ich vor einiger Zeit mal für MinGW32 generiert:
> Sind das die:
> 
https://sourceforge.net/projects/mobilechessboar/files/avr-gcc%20snapshots%20%28Win32%29/avr-gcc-10.0.0_2019-12-16_-mingw32.zip/download
> ?
> Falls ja, würde ich die in den nächsten Tagen mal installieren und das
> Ergebnis hier mitteilen.

Von der v10 würde ich abraten wegen Codequalität, dito für alle v9-v12. 
v13 hat mindestens einen (selten auftretenden) Bug, der für v14 gefixt 
ist aber noch nicht rückportiert.

Die v14 wiederum erzeugt suboptimalen Code for floats.

Meine aktuelle Version ist die v8.5.  Zum Testen ob die Tools überhaupt 
laufen wäre dann die "avr-gcc-8.0.1_2018-04-23_mingw32.zip" vom 
2018-04-23 / 57.4 MB.  Das lief damals auf W2K, sollte also auch auf 
neueren Windows Versionen laufen.

> Da meldet sich bei mir der Compiler mit 7.3.0. Aber dazu schrieb Jörg:
> Jörg W. schrieb:
>> Vermutlich Microchips mit privaten Patches zusammen gefrickelte
>> Toolchain.

Die "eigenen Patches" sind wohl vor allem der Support für neuere 
Devices.  Evtl. unterscheiden sich auch die Device-Header / SFRs.

von Oliver S. (oliverso)


Lesenswert?

Eine gute Quelle für avr-gccs für Windows ist Zak Kemble, inzwischen auf 
github zu finden

https://github.com/ZakKemble/avr-gcc-build/releases

Oliver

: Bearbeitet durch User
von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Meine aktuelle Version ist die v8.5.  Zum Testen ob die Tools überhaupt
> laufen wäre dann die "avr-gcc-8.0.1_2018-04-23_mingw32.zip" vom
> 2018-04-23 / 57.4 MB.  Das lief damals auf W2K, sollte also auch auf
> neueren Windows Versionen laufen.
Werde ich irgendwann in den nächsten Tagen ausprobieren und dann 
berichten. Danke erstmal.

Oliver S. schrieb:
> Eine gute Quelle für avr-gccs für Windows ist Zak Kemble, inzwischen auf
> github zu finden
Dazu hatte ich schon mal was geschrieben:

Andreas schrieb:
> Da habe ich irgendwo im Internet gelesen, dass der Compiler von dieser
> Webseite ziemlich aufgeblähten Code liefert. Ich weiss aber im Moment
> nicht mehr wo ich das gelesen habe.
Die Erfahrung haben auch andere gemacht:
Sherlock 🕵🏽‍♂️ schrieb:
> Kann ich bestätigen.

von Oliver S. (oliverso)


Lesenswert?

Andreas schrieb:
>> Da habe ich irgendwo im Internet gelesen, dass der Compiler von dieser
>> Webseite ziemlich aufgeblähten Code liefert. Ich weiss aber im Moment
>> nicht mehr wo ich das gelesen habe.
> Die Erfahrung haben auch andere gemacht:
> Sherlock 🕵🏽‍♂️ schrieb:
>> Kann ich bestätigen.

Erst lesen, dann denken, dann posten…

Auf der von mir verlinkten github -Seite von Zak Kemble (nicht seiner 
Homepage) findet man nicht nur den aktuellen AVR-gcc 14, sondern auch 
alle von ihm früher veröffentlichen Versionen, bis zurück zu 8.3 (oder 
so).

Oliver

: Bearbeitet durch User
von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Meine aktuelle Version ist die v8.5.  Zum Testen ob die Tools überhaupt
> laufen wäre dann die "avr-gcc-8.0.1_2018-04-23_mingw32.zip" vom
> 2018-04-23 / 57.4 MB.  Das lief damals auf W2K, sollte also auch auf
> neueren Windows Versionen laufen.
Aufgrund anderer Dinge hat es noch einige Zeit gedauert, aber habe es 
eben installiert und funktioniert einwandfrei. Vielen Dank

Oliver S. schrieb:
> Was unter einem handelsüblichen Windows 10 schon seltsam ist.

Wer sagt Dir Denn, dass bei mir Windows 10 installiert ist? Mein Rechner 
läuft mit Windows 8.1 und da ich damit bisher gut gefahren bin, gilt bei 
mir: "Never touch a running system". Insbesondere vor dem Hintergrund, 
dass ich, als ich den Rechner neu gekauft hatte, Windows 10 installiert 
hatte. Danach lief der dermassen langsam, das war nicht normal. Ich habe 
dann herausgefunden, dass es an irgendeinam Grafiktreiber lag und ganz 
schnell wieder zurück auf Windows 8.1 installiert. Da ich den Rechner 
momentan dringend brauche, werde ich auch keine neuen Tests mit einer 
neueren Windows-Version machen.

Vielen Dank nochmal an alle für die Unterstützung und Hinweise.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreas schrieb:
> Johann L. schrieb:
>> Meine aktuelle Version ist die v8.5.  Zum Testen ob die Tools überhaupt
>> laufen wäre dann die "avr-gcc-8.0.1_2018-04-23_mingw32.zip" vom
>> 2018-04-23 / 57.4 MB.  Das lief damals auf W2K, sollte also auch auf
>> neueren Windows Versionen laufen.
> Aufgrund anderer Dinge hat es noch einige Zeit gedauert, aber habe es
> eben installiert und funktioniert einwandfrei. Vielen Dank

Wie angekündigt hab ich mal eine v8.5.1 generiert und hochgeladen:

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

avr-gcc-8.5.1_2024-11-23_mingw32.zip

Enthalten sind sind lediglich GCC (v8.5.1), Binutils (v2.43), AVR-LibC 
(v2.2.0).

Dokumentation zur AVR-LibC: 
https://avrdudes.github.io/avr-libc/avr-libc-user-manual-2.2.0/index.html

Dokumentation zu GCC: https://gcc.gnu.org/onlinedocs/gcc-8.5.0/gcc/
wobei alle Devices unterstützt werden, die auch die v14 kann: 
https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/AVR-Options.html

avr-gcc-8.5.1 unterscheidet sich von stock v8.5 durch: 
https://github.com/sprintersb/avr-gcc-8#what-is-it

von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> avr-gcc-8.5.1_2024-11-23_mingw32.zip
Hab ich installiert. Software lässt sich einwandfrei compilieren und 
läuft auch auf dem STK600.

Vielen Dank erstmal.

Beim ersten Compilieren hatte ich natürlich prompt eine "Fehlermeldung":
1
c:/gcc-8-avr-mingw32/bin/../lib/gcc/avr/8.5.1/../../../../avr/bin/ld.exe: address 0x801402 of Multitasking.elf section `.bss' is not within region `data'
2
c:/gcc-8-avr-mingw32/bin/../lib/gcc/avr/8.5.1/../../../../avr/bin/ld.exe: address 0x801402 of Multitasking.elf section `.bss' is not within region `data'
3
c:/gcc-8-avr-mingw32/bin/../lib/gcc/avr/8.5.1/../../../../avr/bin/ld.exe: address 0x801402 of Multitasking.elf section `.bss' is not within region `data'

Nach kurzem Nachdenken fiel mir auf, dass ich als Parameter beim 
Compiler und Linker "-mmcu=at90can128" angegeben hatte, die Software 
aber mittlerweile für den AT90CAN128 zu gross ist, was den Ram betrifft. 
Beim Compilieren für den ATMega2560 war die Meldung nicht.

Das Ganze nochmal getestet für den ATMega162 mit folgender Ergänzung 
beim Linker:
1
-Wl,-Tdata=0x800500 -Wl,--defsym,__DATA_REGION_ORIGIN__=0x800500 
2
-Wl,--defsym=__DATA_REGION_LENGTH__=32k

ohne diese Ergänzungen denselben "Fehler" wie für den AT90Can128. Mit 
den obigen Parametern beim Linken kam die Meldung nicht.

Von daher gefällt mir die "Fehlermeldung" gut. Denn bei der Version 
4.3.3 wurde die Software ohne irgendeine Meldung compiliert. Da hatte 
ich erst mit avr-size gesehen, dass der Ram nicht ausreicht.

Nochmals vielen Dank für Deine Bemühungen und Aufwand.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreas schrieb:
> c:/gcc-8-avr-mingw32/

Die "Installation" dieser v8.5.1 besteht nur im Auspacken des ZIP.  Der 
Ordner kann dort ausgepackt werden, wo es einem am besten passt; es 
braucht nicht an der C: Wurzel zu sein.

von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Die "Installation" dieser v8.5.1 besteht nur im Auspacken des ZIP.  Der
> Ordner kann dort ausgepackt werden, wo es einem am besten passt; es
> braucht nicht an der C: Wurzel zu sein.
Ok, danke. Das wusste ich nicht. Ich meine ich hätte hier irgendwo im 
Forum gelesen, dass Winavr2010 im Verzeichnis C:\ installiert sein muss. 
Daher habei ich das so beibehalten. Werde ich aber bei Gelegenheit 
verschieben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Andreas schrieb:
> Ich meine ich hätte hier irgendwo im Forum gelesen, dass
> Winavr2010 im Verzeichnis C:\ installiert sein muss.

WinAVR kam mit einem kleinen Installer, der es optional erlaubte, den 
Pfad zum bin/ Verzeichnis in PATH aufzunehmen.  Wenn man danach WinAVR 
verschiebt, dann wird die Compiler natürlich nicht mehr per PATH 
gefunden.

Bei meinem ZIP handelt er sich nicht um einen Installer, und es ist auch 
kein WinAVR enthalten sondern AVR Tools für Windows / MinGW32.

Man kann die Tools direkt per absoluten Pfad aufrufen, uns / oder man 
kann den Pfad des bin/ Verzeichnisses in PATH aufnehmen, so dass man 
ienfach avr-gcc etc. verwenden kann.

von Andreas (ah3112)


Lesenswert?

Johann L. schrieb:
> Man kann die Tools direkt per absoluten Pfad aufrufen, uns / oder man
> kann den Pfad des bin/ Verzeichnisses in PATH aufnehmen, so dass man
> ienfach avr-gcc etc. verwenden kann.

Danke für die Erklärung. Path muss ich noch ändern. Da ich ein Fan von 
eclipse bin, habe ich bisher nur dort die entsprechenden Variablen 
geändert.

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.