[Linux] Aggiornare la toolchain Avr

@astro hai guardato qui?

@astro:
ma la MEGA2560 è in vendita da 1 anno, scusa... :wink:

@brain:
è il link da cui si scarica la toolchain ufficiale Avr8, quella che legacy dice sia un potpourri fra codice della Avr8 e patch della Avr32. Quella che mi sta dando problemi di funzionamento.

avevo visto che astrobeed cercava quella roba lì...

BrainBooster:
@astro hai guardato qui?
http://www.atmel.com/tools/ATMELAVRTOOLCHAIN3_2_3FORLINUX.aspx

Il file dei sorgenti è lo stesso di quello della versione Windows, ovvero contiene solo gli update e non tutti i sorgenti della toolchain.

leo72:
@astro:
ma la MEGA2560 è in vendita da 1 anno, scusa... :wink:

Vallo a dire all'Arduino Team che stanno vendendo una scheda non utilizzabile al 100% con gli strumenti di serie, ovvero indicassero loro una procedura di patch ufficiale per i vari S.O. :slight_smile:
Io nel mio piccolo sto risolvendo la questione per Windows, voi cercate di risolverla per Linux, forse dovrebbe andare bene anche per MAC con i dovuti ritocchi, dopo di che chiediamo all'Arduino Team un adesivo omaggio e un caffè pagato per il lavoro svolto :smiley:

Nelle release notes della toolchain di atmel a 8bit c'è scritto che il atmega2560 è supportato.

Su Linux la toolchain non è inclusa, la scarichi dai repo della tua distro. Molte distro hanno versioni aggiornate ed il problema non si pone. Casomai sorgono altri problemi, quindi è il classico cane che si morde la coda: risolto il problema A spunta il problema B, risolto questo spunta il problema C ecc... E' la fregatura di avere un sistema aggiornato: usando una versione freezata sai i suoi limiti ma anche le sue potenzialità.

Il problema è che al momento non pare esistere una versione di avr-gcc che sia esente del tutto da problemi. E di distro nell'ultimo anno ne ho provate un sacco. Quindi va trovata la giusta combinazione che permetta di risolvere almeno i problemi più grossi se che ne vengano fuori altri (vedi ad esempio il bug della funzione delay).

BrainBooster:
Nelle release notes della toolchain di atmel a 8bit c'è scritto che il atmega2560 è supportato.
http://www.atmel.com/Images/avr8-gnu-toolchain-3.2.3.314-readme.pdf

Guardavo questa pagina:

Leggo:

avr6
“Enhanced” devices with 3-byte PC, i.e. with at least 256 KiB of program memory.
mcu = atmega2560, atmega2561.

Non è che forse allora basta l'aggiunta di questa opzione specificare il tipo di MCU per far sì che il codice compilato da gcc-avr venga correttamente elaborato anche per micro con 256 kB di Flash?

EDIT:
se però è un bug... sono un po' fava stamani... :roll_eyes:

leggo:"

Some AVR devices support memories larger than the 64 KiB range that can be accessed with 16-bit pointers. To access memory locations outside this 64 KiB range, the contentent of a RAMP register is used as high part of the address: The X, Y, Z address register is concatenated with the RAMPX, RAMPY, RAMPZ special function register, respectively, to get a wide address. Similarly, RAMPD is used together with direct addressing.

magari si potrebbero usare le macro:
AVR_HAVE_RAMPD
AVR_HAVE_RAMPX
AVR_HAVE_RAMPY
AVR_HAVE_RAMPZ
per capire se è uno di quei micro con la super memoria, e agire di conseguenza (workaround)

Che casino il sito di Atmel, con tutto il rispetto per l'azienda non posso constatare la mia è altrui confusione in merito.

Dunque ho scovato il link ai sorgenti con script per compilare la toolchain atmel. Alla fine a me interessano solo le patch per la toolchain da integrare nel file spec di ogni pacchetto rpm sorgente così da ricreare i pacchetti con cui aggiornare l'attuale versione della toolchain.

Si parte da qui: http://distribute.atmel.no/tools/opensource/

Occhio che se andate in parent directory non c'è link che vi riporti a quell'indirizzo. Li c'è tutto, buon divertimento, fate sapere se trovate la pacth per i problemi di indirizzamento oltre le 64 kword.

leo72:
Leggo:

avr6
“Enhanced” devices with 3-byte PC, i.e. with at least 256 KiB of program memory.
mcu = atmega2560, atmega2561.

Non è che forse allora basta l'aggiunta di questa opzione specificare il tipo di MCU per far sì che il codice compilato da gcc-avr venga correttamente elaborato anche per micro con 256 kB di Flash?

Per compilare devi dire a gcc con quale micro stai lavorando, infatti se selezioni la MEGA2560 come board e abiliti il modo verbose trovi tutta una serie di comandi, uno per ogni file .c o .cpp da compilare, dove è chiaramente il 2560.

\arduino-1.0\hardware\tools\avr\bin\avr-gcc -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=100 -ID:\Elettronica\Arduino\arduino-1.0\hardware\arduino\cores\arduino -ID:\Elettronica\Arduino\arduino-1.0\hardware\arduino\variants\mega

astrobeed:
Per compilare devi dire a gcc con quale micro stai lavorando, infatti se selezioni la MEGA2560 come board e abiliti il modo verbose trovi tutta una

Sì, lascia perdere. Era una cazzata che avevo scritto.

MauroTec:
Che casino il sito di Atmel, con tutto il rispetto per l'azienda non posso constatare la mia è altrui confusione in merito.

+1
Tempo fa mi sono registrato per scaricare la toolchain. NON esiste una pagina pubblica per fare il log, se vuoi scaricare qualcos'altro i link ti portano sempre alla pagina di registrazione. Avevo nella cache la pagina di log ma poi l'ho persa.

astrobeed:
Il file dei sorgenti è lo stesso di quello della versione Windows, ovvero contiene solo gli update e non tutti i sorgenti della toolchain.

Anche nel link di Mauro ci sono solo le patch. In pratica va scaricata la toolchain "vanilla" e poi patchata con le patch di Atmel.

leo72:
Che casino il sito di Atmel, con tutto il rispetto per l'azienda non posso constatare la mia è altrui confusione in merito.

Vero, il sito Atmel è un casino :slight_smile:

Tornando all'argomento principale, ho scaricato adesso la toolchain 8bit per Linux, dentro ci sono tutti gli eseguibili già compilati, quindi completi di patch, pronti all'uso.
Per me state sbagliando alla grande il modo di procedere, dovete solo sostituire la versione di avr-gcc che avete sul pc con quella fornita con la toolchain, non dovete compilare nulla.
Adesso non ho tempo per mettere mano a questa cosa per Linux, prima voglio chiudere il discorso Windows, e siamo in dirittura d'arrivo, poi vi do una mano con Linux.
Dato so già dove tocca mettere le mani, vedi problema delay.h che non è un bug, è giusto che sia così, non dovrei metterci molto a sistemare la questione Linux, che probabilmente è pure più semplice che per Windows.

leo72:
Tempo fa mi sono registrato per scaricare la toolchain. NON esiste una pagina pubblica per fare il log, se vuoi scaricare qualcos'altro i link ti portano sempre alla pagina di registrazione. Avevo nella cache la pagina di log ma poi l'ho persa.

Visto che parli di registrazione volevo chiedere:
E' possibile farlo da privati?
Chiedo questo perchè nella pagina di registrazione come campi obblibati
c'è anche il numero di dipendenti e altre cose che sono tipiche di una azienda.

Carletto.

@Astro:
ora non sono sul mio sistema, ma su una Ubuntu 10.04. Proverò inserendo il file delay.h.

@Carletto:
sì, puoi farlo.

carletto:
Chiedo questo perchè nella pagina di registrazione come campi obblibati
c'è anche il numero di dipendenti e altre cose che sono tipiche di una azienda.

E' solo proforma, non è una vera registrazione, puoi scriverci quello che ti pare in quei campi, pure che ti chiamo Paolino Paperino, basta che indichi una email esistente perché il link per accedere al file ti arriva li.
Personalmente trovo che sia una grande scocciatura compilare quei campi ogni volta che devo scaricare qualcosa se ho cancellato la cache del browser.

A quel link ci sono arrivato da qui http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=104134
Approposito guarda il post di madworm che dice in merito a attiny4313.

L'ultima versione della toolchain sembra essere la 3.3.0 vedi link Redirect Notice

Anche nel link di Mauro ci sono solo le patch. In pratica va scaricata la toolchain "vanilla" e poi patchata con le patch di Atmel.

Non chiedo altro, mi basta e avanza, la pacth che sembra risolvere è fixedendpoint o simile dove vedo che introduce molto codice, ma qui legacy dovrebbe pure sapermi dire qualcosa in dettaglio.

Vero, il sito Atmel è un casino smiley

Tornando all'argomento principale, ho scaricato adesso la toolchain 8bit per Linux, dentro ci sono tutti gli eseguibili già compilati, quindi completi di patch, pronti all'uso.
Per me state sbagliando alla grande il modo di procedere, dovete solo sostituire la versione di avr-gcc che avete sul pc con quella fornita con la toolchain, non dovete compilare nulla.
Adesso non ho tempo per mettere mano a questa cosa per Linux, prima voglio chiudere il discorso Windows, e siamo in dirittura d'arrivo, poi vi do una mano con Linux.
Dato so già dove tocca mettere le mani, vedi problema delay.h che non è un bug, è giusto che sia così, non dovrei metterci molto a sistemare la questione Linux, che probabilmente è pure più semplice che per Windows.

Oddio tu sei un'utente windows noi facciamo tutto in modo molto ordinato e abbimo degli standard da seguire, che ci obligano a fare i pacchetti binari a partire da quelli sorgente, applicando le patch al sorgente senza metterci mano. Solo il mainteiner del sorgente può toccare e rilasciare il codice modifcato altrimenti faccio un fork e non è quello che i distribuitori vogliono fare. Capisco che per l'utente windows pasticciare con gli eseguibili e cosa all'ordine del giorno ma qui non lo possiamo fare, anche perchè il controllo di integrità del gestore di pacchetti mi segnalerà la cosa come anomala. Però chi usa arduino IDE con la toolchain inserita nel percorso dell'ide può provare a installare tutto li facendo la sostituzione degli eseguibili, in effetti se funziona così per questi utenti è risolto il problema.

@Carletto

Visto che parli di registrazione volevo chiedere:
E' possibile farlo da privati?
Chiedo questo perchè nella pagina di registrazione come campi obblibati
c'è anche il numero di dipendenti e altre cose che sono tipiche di una azienda.

Fai tutto a caso, oddio io ho messo arduino user come qualifica e non ho avuto problemi e sono un privato come te.

Ciao.

leo72:
@Astro:
ora non sono sul mio sistema, ma su una Ubuntu 10.04. Proverò inserendo il file delay.h.

Cosa intendi per inserire il file delay.h ?
Io ti ho detto di editare quello nella cartella avr, che punta ad un suo omonimo nella cartella util, per evitare di includerlo forzatamente nella compilazione dello sketch, per usare delay.h delle avrlibc allegate alla toolchain devi prima includere "math.h" direttamente nel sorgente.

MauroTec:
Oddio tu sei un'utente windows noi facciamo tutto in modo molto ordinato e abbimo degli standard da seguire,

Sbagliato, io non sono un normale utente, sono uno sviluppatore che lavora sia con Windows che con Linux, per questo motivo li conosco molto bene tutti e due :slight_smile:

che ci obligano a fare i pacchetti binari a partire da quelli sorgente, applicando le patch al sorgente senza metterci mano.

Capisco perfettamente quello che vuoi dire, però in questo caso invece di complicarsi la vita per capire come deve essere compilato gcc per la toolchain Atmel mi pare logico utilizzare gli eseguibili già pronti, e sicuramente funzionanti, almeno in prima battuta per verificare se il tutto funziona, poi nulla vieta, con calma e tranquillità, di ricompilarsi il tutto partendo dai sorgenti e dalle patch.

legacy:
Come ti ho scritto dovrai aspettare avr-gcc-4.7.1, tutte le attuali non ne sono capaci come ti ho raccontato.

Mi spieghi come mai la toolchain Atmel non ha questo limite ?

Aggiornamento.

Ho scaricato la toolchain ufficiale dal sito Atmel. Ho poi sostituito il file delay.h presente in /avr/include/avr con quello presente qui:
http://www.wrightflyer.co.uk/avr-gcc/

Ecco cosa vien fuori.

In file included from /home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/wiring_private.h:30:0,
from /home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/HardwareSerial.cpp:28:
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h: In function 'void _delay_ms(double)':
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h:149:42: error: 'fabs' was not declared in this scope
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h:149:43: error: 'ceil' was not declared in this scope
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h: In function 'void _delay_us(double)':
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h:226:42: error: 'fabs' was not declared in this scope
/home/geuropa/Scrivania/toolchain/bin/../lib/gcc/avr/4.5.1/../../../../avr/include/avr/delay.h:226:43: error: 'ceil' was not declared in this scope

Ah, premetto che ho anche creato un link simbolico in /avr/include che punta a /avr/include/avr/delay.