[Linux] Aggiornare la toolchain Avr

Beh allora io sono apposto con la mia versione di avr-gcc

$ rpm -q avr-gcc
avr-gcc-4.4.2-2.fc12.i686

La versione di gcc 4.5.1, allegata alla toolchain di Atmel, probabilmente è stata modificata da loro rispetto all'originale, compila senza problemi fino a 256k di flash del Mega2560, verificato personalmente sia sotto AvrStudio 4, dove ho un paio di applicativi per Mega2560 che tra programma e tabelle dati arrivano quasi al limite della flash, e con Arduino 0023 e 1.0 dopo il trapianto, ancora sperimentale, della toolchain.

Mi sembra strano che abbiano apportato delle modifiche a codice GPL e le hanno chiuse, perchè ancora io di patch Atmel ufficiali per avr-gcc & company non ne ho trovato. Ora sentendo ciò che dice legacy devo dire che sono confuso e perplesso, vedremo cosa esce fuori.

Ciao.

MauroTec:
Mi sembra strano che abbiano apportato delle modifiche a codice GPL e le hanno chiuse, perchè ancora io di patch Atmel ufficiali per avr-gcc & company non ne ho trovato.

L'eventuale modifica al compilatore, parliamo di gcc, è una mia ipotesi se è vero quello che dice Legacy, è tutto da verificare.
Mi pare che Atmel da anche i sorgenti del tutto, non li ho scaricati perché non mi interessa guardarli, quindi dovrebbe essere facile capire se il gcc è stato modificato oppure no.
In tutti i casi quello che contano sono i fatti, con AvrStudio 4 e la toolchain Atmel compilo per l'ATmega2560 senza problemi arrivando quasi al limite della flash, idem con la stessa toolchain montata sull'IDE di Arduino, quindi la questione è molto semplice visto che quello che conta sono i fatti e non le ipotesi :slight_smile:

MauroTec:
perchè ancora io di patch Atmel ufficiali per avr-gcc & company non ne ho trovato. Ora sentendo ciò che dice legacy devo dire che sono confuso e perplesso, vedremo cosa esce fuori.

Ho scaricato adesso i sorgenti e gli ho dato un'occhiata veloce, in effetti contiene solo roba riguardante gli AVR32 però si tratta sicuramente solo di un update dei sorgenti della toolchain e non di tutti quanti.
Tocca rovistare sul sito Atmel per trovare gli altri update, sopratutto quelli per gli 8 bit, che saranno stati allegati alle precedenti release della toolchain ed eventualmente il sorgente globale del tutto.

Però viene fuori una situazione un po' ai limiti del paradosso. L'IDE per Windows di Arduino contiene un compilatore che non è in grado di compilare correttamente codice più grande di 64K però viene venduta una scheda con un chip che ne contiene 256K.

Non voglio additare nessuno prima di sapere esattamente come stanno le cose ma a questo punto sarebbe gradito un chiarimento da parte del team.

leo72:
Non voglio additare nessuno prima di sapere esattamente come stanno le cose ma a questo punto sarebbe gradito un chiarimento da parte del team.

Il limite è 128 kbyte se ragioniamo con questi e non con le word, due byte ciascuna, ho l'impressione che il team Arduino non si sia ancora reso conto dell'esistenza di questo problema, il Mega 2560 è un micro relativamente recente e ha sostituito il Mega 1280 presente sulla precedente versione di Arduino Mega, non credo ci siano applicazioni Arduino che richiedono più di 128k, almeno io non ne ho viste.
C'e sempre la questione del bug dei dati posti oltre 64k, credo sia molto difficile che una normale applicazione Arduino incappi in questo errore, però dato che è un problema noto sarebbe stata cosa gradita inserire nella 1.0 di Arduino un compilatore aggiornato ad una release esente da questo problema.
Per quanto riguarda Windows il problema lo sto risolvendo io in modo definitivo, tra oggi e domani rilascio una prima release, da considerarsi sperimentale, della toolchain Atmel per l'IDE 1.0, così grazie alla collaborazione di qualche volenteroso beta tester vediamo se ci sono ulteriori problemi da risolvere oltre a quelli che ho trovato io.

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