Arduino Forum

International => Italiano => Megatopic => Topic started by: leo72 on Mar 18, 2012, 06:29 pm

Title: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 18, 2012, 06:29 pm
In questo thread parleremo di come aggiornare la toolchain Avr sul sistema operativo Linux.
Il materiale di partenza è lo script presente a questa pagina:
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=42631

Con questo script si scarica e si compila (patchata) la toolchain Avr con avr-gcc alla versione 4.5.1
Il problema è che poi si ha una cartella contenente l'albero della toolchain completa e.... come usarla per sostituirla a quella della propria distribuzione?

Altro quesito: qualcuno ha compilato ed installato la toolchain ufficiale Atmel??
http://www.atmel.com/tools/ATMELAVRTOOLCHAIN3_2_3FORLINUX.aspx
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 18, 2012, 08:10 pm
Allora, facciamo le cose con ordine.

Il link su avrfreaks porta nel primo post 3 file da scaricare, il primo  di questi permette la creazione della toolchain con avrgcc 4.5.1 ecc.

Ma qui http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=115567 (http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=115567) c'è anche un'altro file che colpisce la mia attenzione specie per il nome "buildavr-gcc-4.5.1-atmel-3.3.1-avrtools-v2.zip", cosa vorrà dire atmel-3.3.1?

Aprendo il primo file compresso si scopre che ci sono degli script che scaricano delle patch da freebsd, quindi sono delle patch sviluppate da freebsd.
Ora queste patch io non ho avuto ancora modo di studiarle, non applico pacth se non controllo per principio e non per malafede in freebsd.

Il file che scarica le pacth è get-patches.sh che compie questa operazione con wget. Io sto pensando di installare una versione di Fedora su una partizione e fare delle prove, perchè al momento la situazione del sistema in uso attuale mi sta più che bene e non voglio compromettere la stabilità. Per ubuntu o altre distro che usano il formato di pacchetti .deb mi devo documentare ma credo che basti fare un "cat" per concatenare tutte le patch in un unico file .diff e modificare ogni file .desc per fargli applicare le patch prima della compilazione e seguente creazione del pacchetto binario .deb.

Ora riuscendo a pacthare il tutto e ad installare tutto correttamente nei posti giusti rimane sempre il problema dell'ide, cioè come fare in modo che l'ide usi avr-g++ installato in /usr/local/bin anziche quello presente in /usr/bin. Si potrebbe risolvere rimuovendo i pacchetti avr-gcc installati in /usr e inserire i file manualmente, presi dalla directory di cui parla Leo, ma questo lavoro bisogna farlo manualmente.

Allora la soluzione di eccelenza per me è quella di ricreare i pacchetti binari .deb prendendo gli originali modificarli e avviare la costruzione del pacchetto. Se tu Leo vuoi tentare questa strada posso provare a guidarti, qualcosa di debian me la ricordo ancora. Dimmi la distro che usi ed eventualmente se lo sai il repo da cui prendere i pacchetti originali.

Quote
Altro quesito: qualcuno ha compilato ed installato la toolchain ufficiale Atmel??
http://www.atmel.com/tools/ATMELAVRTOOLCHAIN3_2_3FORLINUX.aspx


Allego solo il penultimo file nella lista presente a quel link per motivi di spazio, come vedi sono solo patch e se guardi in ogni file vedi sono modifiche inerenti avr32. Non ti nascondo che quei link mi lasciano un pò smarrito.

Mo vado a magna, ciao.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 18, 2012, 08:47 pm
Quote
Ora riuscendo a pacthare il tutto e ad installare tutto correttamente nei posti giusti rimane sempre il problema dell'ide, cioè come fare in modo che l'ide usi avr-g++ installato in /usr/local/bin anziche quello presente in /usr/bin. Si potrebbe risolvere rimuovendo i pacchetti avr-gcc installati in /usr e inserire i file manualmente, presi dalla directory di cui parla Leo, ma questo lavoro bisogna farlo manualmente.

perchè non provi a sostituire con un hardlink che punta a quelli appena compilati?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 18, 2012, 10:26 pm
Vediamo se riesco a riassumere alcuni punti ed alcune prove che ho fatto.

Premessa: Kubuntu 11.04 con avr-gcc/binutils/avr-libs presenti nei repo ufficiali Ubuntu

Ho scaricato il 1° script del thread di avr-freaks, quello denominato
build-avr-gcc-4.5.1-binutils-2.20.1-libc-1.8.0-gdb-7.3.1-dude-5.11.1-avarice-2.12-aw.zip

Scompattandolo, si hanno alcuni file .sh. Eseguendoli secondo il readme, essi prelevano prima i sorgenti, poi le patch ed infine compilano tutto. Non ho installato nulla sul sistema perché non so esattamente come dividere tutti i file perché sono 97.300!!!! 917 MB di eseguibili, file oggetto, librerie ecc... Una cosa impossibile da gestire a mano! Quindi ho provato l'approccio dell'IDE di Windows: ho copiato la cartella /avr che si è creata all'interno della cartella contenuta in /arduino-0022/hardware/tools, andando praticamente a sovrascrivere la cartella /avr lì presente, che alla fine non contiene nient'altro che una lib per gestire la EEPROM.

Poi ho disinstallato avr-gcc/binutils/avr-libs dal mio sistema ed ho provato a compilare uno sketch. Risultato: l'IDE non trova il compilatore. Come faccio a dire all'IDE di usare il compilatore che ha al suo interno? Qual'è il settaggio che sulla versione di Windows dice all'IDE di usare avr-gcc contenuto in /hardware/tools/avr/ecc... al posto di quello presente nel sistema?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 18, 2012, 10:44 pm
PS:
non mi ricordo da dove l'ho tirato fuori, ma ho anche questo link:
http://www.wrightflyer.co.uk/avr-gcc/

In fondo vedete dei pacchetti .deb che si chiamano
avr-gcc-4.5.1-avrfreaks-2011-dec-29-u10.04.i386.deb

C'è anche un .txt che riporta (cito):
Description: Ubuntu 10.04 i386 avr-gcc toolchain  based on the below script from AvrFreaks.
build-avr-gcc-4.5.1-binutils-2.20.1-libc-1.8.0-gdb-7.3.1-dude-5.11.1-insight-2.12 

Quindi pare che quel .deb sia un mega-archivio di tutti i file che dovrebbero comporre la toolchain che sono creati con lo script di Bingo600. Son curioso di provare quella toolchain, ma lo farò domani perché ora non posso mettermi a fare delle prove per verificare se lo sketch ArduinoISP compila per bene, se non ci sono i problemi del delay, se gli sketch di dimensioni maggiori di 64K lavorano correttamente, se non c'è il bug del progmem delle ultime versioni di binutils ecc...
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 18, 2012, 10:53 pm

Qual'è il settaggio che sulla versione di Windows dice all'IDE di usare avr-gcc contenuto in /hardware/tools/avr/ecc... al posto di quello presente nel sistema?


E' solo una questione di path, l'IDE di Arduino si aspetta di trovare il compilatore nella cartella "..\arduinoxx\hardware\tools\avr", quando va costruire la riga di comando vi inserisce questo percorso in aggiunta a quello dove si trova, idem per tutti i seguenti comandi.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 18, 2012, 11:12 pm
No, questa cosa funziona solo su Windows. Su Linux non va.

Ho provato il pacchetto .deb che ho menzionato qui sopra ma ho ricevuto un errore di mancanza di eseguibile appena avviata la compilazione. Questa cosa della toolchain è più ostica di quanto sembrasse. L'unico modo per compilare è stato quello di creare manualmente la toolchain con lo scritp di Bingo, poi esportare nella variabile PATH il percorso dell'albero della toolchain e lanciare l'IDE di Arduino. Ma ho ricevuto un errore su un file delay.h. File che vedo è stato inserito a mano insieme all'elenco dei pacchetti .deb. Ora non ho voglia di fare altre prove. Domani ci rimetto le mani.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 12:17 am
Quote
Qual'è il settaggio che sulla versione di Windows dice all'IDE di usare avr-gcc contenuto in /hardware/tools/avr/ecc... al posto di quello presente nel sistema?


Magari puoi provare a creare un link simbolico nella cartella /hardware/tools che si chiama avr e che punta alla cartella con dentro tutta la tolchain, oppure copiare il tutto in avr, ma non credo che sia questo il problema perchè avrai sicuramente provato.

In merito al delay.h questo deve trovarsi in /avr/include/utils/delay.h insieme ad altre utility, il core invece lo cerca in avr/include e a me compare un errore ed al tempo ho risolto modificando il core arduino.

Quei file deb li ho visti e ci sei arrivato dal link di avrfreaks.

Quote
Scompattandolo, si hanno alcuni file .sh. Eseguendoli secondo il readme, essi prelevano prima i sorgenti, poi le patch ed infine compilano tutto.


Se mi fai un elenco parziale delle directory che trovi all'interno della director build ti posso fare un'esempio sensato. Se scarichi i sorgenti di avr-gcc o avr-libc o altro software GNU questi usano tutti gli autotools ed in genere si deve eseguire ./configure && make && make install. Lo script avvia sicuramente la compilazione in questo modo su tutti i sorgenti. Nel link di avrfreaks è spiegato che di default il percorso di installazione è /usr/local ma se vuoi lo puoi personalizzare e mostra il prefix=/path e poi l'export:

PREFIX=/usr/local/avr
export PREFIX

Questo ha lo stesso effetto di avviare la configurazione del pacchetto sorgente in questo modo:
./configure PREFIX=/usr e poi make e make install

Quindi io dico che se hai le directory dei pacchetti sorgente entri in ognuno e fai make install da utente semplice e se vedi il tentativo di scrivere in /usr/local/ capisci che sta tentando di installare e pure dove. Se non vuoi sporcare /usr/local puoi provvisoriamente usare il comando make DESTDIR=tua_dir install e all'interno dovresti trovare l'albero di directory tipico di linux es bin etc  share share/man ecc. Però il pacchetto così non può funzionare perche crede di essere eseguito a partire dalla variabile data in PREFIX ma torna utile per fare dei pacchetti deb o rpm tramite tools anche grafico.

@Brain
Quote
perchè non provi a sostituire con un hardlink che punta a quelli appena compilati?

Si si può tentare io però sono alla frutta perchè non uso ide e core arduino ma solo le schede, da tempo ormai ho trovato il modo di sviluppare classico tipico di avrstudio ma senza facility per i registri. A me serve aggiornare la toolchain ma non la posso testare con arduino IDE.

Piccola digressione:
di recente ho scoperto che questa riga di codice non lavora del tutto
vsnprintf_P(onerow, sizeof(onerow), PSTR("temperatura: %2.2f\0"), &th_data);

Per far si che lavori bisogna aggiungere  a LFLAGS questa riga:
LFLAGS += -Wl,-u,vfprintf -lprintf_flt -lm

Io risolvo scrivendo questo nel file di progetto:
CONFIG += printfloat

Chi usa Arduino non ha questa flessibilità e io mi sento incatenato.

Ciao.



Ciao.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 06:20 am
@legacy:
se almeno con la versione 4.5.x siamo in grado di indirizzare il codice all'interno di uno spazio indirizzi di 128 KB (ossia 64K word) a me è più che sufficiente. L'intento è quello di usare gli Atmega1284, che sono i chip DIP attualmente più capienti.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 07:08 am

Ma ho ricevuto un errore su un file delay.h. File che vedo è stato inserito a mano insieme all'elenco dei pacchetti .deb.


Questa te la risolvo io, è il primo problema in cui mi sono imbattuto nella versione per Windows, la soluzione è editare il file delay.h che si trova in "..\Arduino-xx\hardware\tools\avr\avr\include\avr" nel seguente modo:

Code: [Select]

#ifndef _AVR_DELAY_H_
#define _AVR_DELAY_H_

#warning "This file has been moved to <util/delay.h>."
// #include <util/delay.h>

#endif /* _AVR_DELAY_H_ */


Questo delay.h non ha nulla a che vedere con il delay di Arduino, infatti se lo usi viene regolarmente compilato, è per la  "_delay_ms()" e " _delay_us()" delle avrlibc che Arduino non usa, se le vuoi utilizzare devi mettere "#include <math.h>" seguito da "#include <util/delay.h>" nello sketch, questo perché la delay usa due istruzioni, fabs e ceil, definite in math.h

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 07:14 am
Oggi riproverò con più calma.
Ieri sera avevo provato ad inserire il file delay.h che fornisce il creatore del pacchetto .deb nel percorso in cui andava a sbirciare il compilatore ma non era cambiato nulla.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 07:20 am

@legacy:
se almeno con la versione 4.5.x siamo in grado di indirizzare il codice all'interno di uno spazio indirizzi di 128 KB (ossia 64K word) a me è più che sufficiente. L'intento è quello di usare gli Atmega1284, che sono i chip DIP attualmente più capienti.


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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 07:27 am
E la versione allegata all'IDE per Windows? Da quel che capisco, essendo la 4.3.5, dovrebbe avere il limite a 64K di word, giusto? Se è così, chi compra la MEGA non può usare il chip in tutta la sua funzionalità.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 07:42 am

E la versione allegata all'IDE per Windows? Da quel che capisco, essendo la 4.3.5, dovrebbe avere il limite a 64K di word, giusto? Se è così, chi compra la MEGA non può usare il chip in tutta la sua funzionalità.


Con l'IDE, 22/23 che 1.0, è allegata la versione 4.3.2 che oltre al limite delle 64 kword ha il bug dei dati posti oltre 64k nella flash, e tutta la discussione relativa a Windows è partita dopo una segnalazione di Menniti di questo problema.
Sostituendo WinAvr fornito di serie con Arduino con l'ultima release, e non capisco perché non è stato fatto dall'Arduino team con la versione 1.0 dell'IDE, il compilatore è la versione 4.3.3 dove è ancora presente il limite delle 64 kword e il bug dei 64k, però permette di compilare per più modelli di micro rispetto alla precedente versione, p.e. il famigerato Attiny4313.
In tutti i casi anche con la 4.3.5 puoi compilare per il 1284 senza nessun problema, il bug dei dati oltre 64k è stato risolto a partire dalla 4.3.4.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 08:24 am
Beh allora io sono apposto con la mia versione di avr-gcc

Code: [Select]

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


Quote
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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 08:38 am

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  :)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 08:51 am

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 08:57 am
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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 09:09 am

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 19, 2012, 09:10 am
@astro hai guardato qui?
http://www.atmel.com/tools/ATMELAVRTOOLCHAIN3_2_3FORLINUX.aspx
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 09:12 am
@astro:
ma la MEGA2560 è in vendita da 1 anno, scusa...  ;)

@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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 19, 2012, 09:12 am
[quote ]
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.
[/quote]
avevo visto che astrobeed cercava quella roba lì...
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 09:12 am

@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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 09:17 am

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


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.  :)
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  :D
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 19, 2012, 09:19 am
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
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 09:35 am
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).


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:
http://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html

Leggo:
Quote
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...  :smiley-roll-blue:
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 19, 2012, 09:47 am
leggo:"
Quote
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)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 09:53 am
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/ (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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 10:06 am


Leggo:
Quote
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.

Code: [Select]

\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
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 10:11 am

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.


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.


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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 10:27 am

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  :)

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: carletto on Mar 19, 2012, 10:35 am

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 10:37 am
@Astro:
ora non sono sul mio sistema, ma su una Ubuntu 10.04. Proverò inserendo il file delay.h.

@Carletto:
sì, puoi farlo.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 10:42 am

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 10:42 am
A quel link ci sono arrivato da qui http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=104134 (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 http://www.google.it/url?sa=t&rct=j&q=atmel+8+bit+toolchain&source=web&cd=2&ved=0CDQQFjAB&url=http%3A%2F%2Fwww.atmel.com%2FImages%2Favr8-gnu-toolchain-3.3.0.364-readme.pdf&ei=7O9mT9n4FMqfOsXr7J8I&usg=AFQjCNEHicCZ2RdsLwfkfPRmZT9oRUZkeQ&cad=rja (http://www.google.it/url?sa=t&rct=j&q=atmel+8+bit+toolchain&source=web&cd=2&ved=0CDQQFjAB&url=http%3A%2F%2Fwww.atmel.com%2FImages%2Favr8-gnu-toolchain-3.3.0.364-readme.pdf&ei=7O9mT9n4FMqfOsXr7J8I&usg=AFQjCNEHicCZ2RdsLwfkfPRmZT9oRUZkeQ&cad=rja)

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

Quote
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
Quote
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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 10:46 am

@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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 10:50 am

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  :)

Quote

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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 11:01 am

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 ?


Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:04 am
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.
Quote
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.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 11:12 am

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:


Mi sa tanto che o stamattina stai ancora dormendo oppure ti è venuto a mancare un altro pollo al sale  :smiley-mr-green:
Rileggiti cosa ti ho spiegato qui (http://arduino.cc/forum/index.php/topic,97237.msg730287.html#msg730287), e che ti ho ripetuto qualche post indietro.
Potrebbe anche essere, ma non te lo garantisco, che se segui la mia procedura dopo riesci a compilare gli sketch più semplici, mentre potrebbero saltare fuori nuovi errori con quelli più complessi.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: carletto on Mar 19, 2012, 11:23 am

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

@Carletto:
sì, puoi farlo.


Grazie
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:24 am
Lasciamo perdere il pollo al sale, che ce l'ho ancora sul gozzo  :P
Allora ho rifatto con la tua procedura (me l'ero dimenticata).
Ho provato compilando ArduinoISP.
Funziona perfettamente con l'Arduino UNO ma NON funziona con l'Arduino MEGA


Code: [Select]
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/HardwareSerial.cpp:92:15: error: attempt to use poisoned "SIG_USART0_RECV"
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/HardwareSerial.cpp:145:15: error: attempt to use poisoned "SIG_USART1_RECV"
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/HardwareSerial.cpp:155:15: error: attempt to use poisoned "SIG_USART2_RECV"
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/arduino/cores/arduino/HardwareSerial.cpp:165:15: error: attempt to use poisoned "SIG_USART3_RECV"


Non riconosce le seriali aggiuntive.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 11:27 am

Funziona perfettamente con l'Arduino UNO ma NON funziona con l'Arduino MEGA


Bene, un passo avanti l'abbiamo fatto  :)
Questo errore con la MEGA non l'ho ancora visto, però non ho nemmeno provato a compilare uno sketch che usa più di una seriale, ci provo adesso e ti faccio sapere tra qualche minuto.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:30 am
Seconda prova.
NON funziona neanche con i Tiny. Ecco il BlinkWithoutDelay Vs. un Tiny84:

Code: [Select]
In file included from /home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c:26:0:
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:60:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'port_to_mode_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:61:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'port_to_input_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:62:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'port_to_output_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:63:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'port_to_pcmask_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:65:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'digital_pin_to_port_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:67:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'digital_pin_to_bit_mask_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/pins_arduino.h:68:27: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'digital_pin_to_timer_PGM'
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c: In function 'pulseIn':
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c:37:16: error: 'digital_pin_to_bit_mask_PGM' undeclared (first use in this function)
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c:37:16: note: each undeclared identifier is reported only once for each function it appears in
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c:38:17: error: 'digital_pin_to_port_PGM' undeclared (first use in this function)
/home/geuropa/Documenti/Arduino/arduino-tiny-0022/hardware/tiny/cores/tiny/wiring_pulse.c:48:11: error: 'port_to_input_PGM' undeclared (first use in this function)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:32 am
Terza prova.
Lo sketch BlinkWithoutDelay compila per 644 e 1284.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:48 am
'sta cosa comincia a farmi venire il mal di testa... :smiley-sweat:
Sul PC "cavia" ho rimesso tutto com'era prima. Oggi a casa vedrò se mi viene qualche altra idea.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 11:52 am

Se parli dei binari io ti rispondo che non stiamo parlando della stessa cosa, io sto parlando del ramo ufficiale avr-gcc, tu di quanto una azienda ci fa, e a me non mi interessa quello che dicono in Atmel


Ok, chiarissimo.
Infatti io sto parlando degli eseguibili già compilati di Atmel, che sicuramente includono delle patch non ufficiali, e non del compilatore che scarichi dal repository.
Concordo col discorso che non è compito di Atmel fare manutenzione ad avr-gcc, però non sputiamo sul piatto dove mangiamo se loro ci offrono una soluzione funzionante al problema.
Non ho ne tempo, e nemmeno la voglia, di mettermi a verificare se le patch di Atmel a gcc sono fornite in sorgente o solo sotto forma di eseguibili, e tutto sommato non mi interessa, a me interessano solo i risultati finali.
Il compilatore è uno strumento di lavoro e non devo perderci tempo per capire come funziona o come posso modificarlo/correggerlo, se non va bene ne uso uno diverso o una nuova release che risolve i problemi.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 11:57 am
Le patch sono sotto forma di codice sorgente.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 12:02 pm

'sta cosa comincia a farmi venire il mal di testa... :smiley-sweat:


Tu non hai idea di quello che ho passato io per farla funzionare sotto Windows, aggiusti una cosa e subito dopo ne trovi altre cinque che non vanno  :)
Però alla fine si tratta solo di correggere/modificare alcune righe nelle varie librerie, non ho tenuto il conto, ma in totale dovrebbero essere meno di 20 righe di codice, almeno questo per la versione Windows utilizzando in toto tutti i file, e gli eseguibili, della toolchain.
Con Linux se non fai la stessa cosa la situazione potrebbe risultare molto più complicata, vedi errore seriali sulla Mega2560.
Per quanto riguarda la seriale della Mega2560 ho provato ad aggiunge le altre tre, e usarle, allo sketch che stampa la tabella ASCII, non ho nessun errore di compilazione, adesso non posso verificare se poi funzionano sul serio, però più tardi lo faccio.
Per gli ATtiny non ho fatto nessuna prova, in questa prima fase mi interessava far funzionare il tutto con i processori standard di Arduino, quindi 328 e 2560,  ti anticipo che ora sembra essere tutto ok solo con la 0023, con la 1.0 ho ancora dei problemi residui.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 12:11 pm

Seconda prova.
NON funziona neanche con i Tiny. Ecco il BlinkWithoutDelay Vs. un Tiny84:


Provato adesso con il 4313, compila senza problemi.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 12:27 pm

Le patch messe online da Atmel riguardano avr32, che ha una machine layer completamente diversa da quella in avr8, non centra nulla con il problema in oggetto, che non la riguarda, e che quindi non puo' nemmeno lontanamente aiutare, anzi fa solo casino.


Avevamo già stabilito che le patch scaricabili attualmente dalla pagina della toolchain sono solo un update per gli AVR32 relativo all'ultima release della toolchain, ovvero è solo una parte di tutte le patch.

Edit: questo (http://distribute.atmel.no/tools/opensource/avr-gcc/) è il link postato da MauroTec dove dovrebbe esserci tutto.

Edit2: e qui (http://distribute.atmel.no/tools/opensource/avr-gcc/gcc-4.5.1/43-gcc-4.5.1-bug13932.patch) si parla in dettaglio del mega2560 e del pc a 3 byte, ovvero una patch specifica anche se tocca andare a vedere le varie dipendenze per capirci qualcosa sul serio.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 19, 2012, 12:42 pm

Provato adesso con il 4313, compila senza problemi.

Però non abbiamo usato la stessa cosa. Tu hai fatto le prove con la toolchain Atmel, io con la toolchain precompilata del sito linkato, che è costruita partendo dagli script di Bingo600 di Avrfreaks. A casa proverò con la toolchain Atmel.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Mar 19, 2012, 02:07 pm

Per me e' fisicamente impossibile usare le toolchain binarie-x86 di Atmel su quel portatile, dovrei necessariamente ricompilarle per la mia cpu, quindi seguo il consiglio che mi hanno dato a maggioranza ed aspetto il avr-gcc-4.7.1, anzi avr-gcc-4.7.3 seguendo le timeline dei changes promessi.


Indubbiamente sul tuo notebook sei obbligato a ricompilare tutto, tra parentesi lo stesso problema dovrebbe esistere per gli utenti MAC a meno che non sia possibile far girare un eseguibile Linux, senza ricompilarlo, sotto MAC OS, ma forse loro fanno prima ad usare BootCamp e caricare direttamente Windows  :)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 06:17 pm
Quote
Edit2: e qui si parla in dettaglio del mega2560 e del pc a 3 byte, ovvero una patch specifica anche se tocca andare a vedere le varie dipendenze per capirci qualcosa sul serio.


Code: [Select]
{ "avr6",                 ARCH_AVR6, NULL,                        0, 0x0200, "m2561" },
-  { "atmega2560",           ARCH_AVR6, "__AVR_ATmega2560__",        0, 0x0200, "m2561" },
+  { "atmega2560",           ARCH_AVR6, "__AVR_ATmega2560__",        0, 0x0200, "m2560" },
   { "atmega2561",           ARCH_AVR6, "__AVR_ATmega2561__",        0, 0x0200, "m2561" },
     /* Enhanced, == 256K.  */
     /* Xmega, <= 8K FLASH.  */


Questa patch corregge un'errore di copia incolla in pratica hanno dimenticato a corregere l'ultimo campo m2561 in m2560. La patch più corposa è questa: 30-gcc-4.5.1-fixedpoint-3-4-2010.patch che contiene codice che coinvolge tutti i micro. Mentre per attiny la patch più corposa è questa: 32-gcc-4.5.1-avrtiny10.patch

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


E siamo sempre li, il problema è che devi mettere i file nel posto giusto per provare con l'ide arduino, perchè a quello che ricordo la versione per linux non ha il compilatore incluso nel suo tree. Comunque ti assicuro che pasticciare con gli eseguibili non è la strada più semplice anche perchè su linux in fase di configurazione devi specificare il PREFIX e poi installare i file nei posti che rispecchiano il prefix, altrimenti potrebbe non funzionare e allora non trova un file e tu cominci a sporcare il sistema con link simbolici per far stare impiedi la baracca il tutto agendo alla cieca.

Comunque ognuno e libero di trovare e provare la sua strada, io le ho sperimentate tutte e quella della creazione dei pacchetti tramite i tools di sistema è la via più diretta e comoda, anche se prima sarebbe opportuno installare tutto manualmente in /usr/local ma in questo caso bisogna risolvere il problema di far vedere i tools ad arduino, il modo più semplice è quello di disinstallare i pacchetti avr-gcc & company allora scaricare i sorgenti, patchare manualmente, compilare ed installare, allora l'ide userà avr-g++ che trova nel path ed essendocene solo uno userà quello appena installato.

Io continuo a studiare un po le patch e a documentarmi poi passo alla vie di fatto.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 19, 2012, 08:58 pm
Aggiornamento:
Sono passato dal repo di fedora 15 e mi sono preso il pacchetto sorgente di avr-gcc-4.5.3 e ho provato la compilazione, come prima cosa ho notato un'errore di riferimento in libmpc.so allora ho scaricato la versione 0.9 e ho provato a ricompilare e tutto è andato a buon fine, ma ancora non ho provato ad installare ed usare avr-gcc, per questo ancora è presto, prima devo introdurre ad una ad una le patch di Atmel e tentare la compilazione, in più l'applicazione della patch può portare ad errore e bloccare il processo di creazione del pacchetto. Al momento ho introdotto solo la patch Atmel 50-gcc-4.5.1-new-devices.patch, ora aggiungo le altre poco per volta.

Chi volesse tentare dico che deve avere libmpc-devel, libmpfr-devel, gmp-devel, per le versioni io ho:
gmp-devel-5.0.4-4.fc12.i686
libmpc-devel-0.9-1.fc12.i686
mpfr-devel-3.0.0-4.fc12.i686

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 20, 2012, 10:44 pm
BINGO.

Come si vede sotto la compilazione e creazione dei pacchetti binari è andata a buon fine, il problema era proprio la mancanza delle binutils aggiornata con le patch di Atmel.
Code: [Select]

+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/mauro/rpmbuild/BUILD/avr-gcc-4.5.1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/cc1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/cc1plus
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/collect2
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/lto-wrapper
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/libexec/gcc/avr/4.5.1/lto1
file /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-c++ has 1 other hard links
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-c++
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-cpp
hard linked /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-g++.debug to /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-c++.debug
file /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcc-4.5.1 has 1 other hard links
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcc-4.5.1
extracting debug info from /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/bin/avr-gcov
hard linked /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-gcc.debug to /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/lib/debug/usr/bin/avr-gcc-4.5.1.debug
cpio: avr-gcc-4.5.1/gcc-avr/gcc/cfns.gperf: Cannot stat: No such file or directory
58479 blocks
+ /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
+ . ./os_install_post
++ /usr/lib/rpm/redhat/brp-compress
++ ./brp-strip /usr/bin/strip
++ ./brp-strip-static-archive /usr/bin/strip
++ ./brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
++ /usr/lib/rpm/brp-python-bytecompile
++ /usr/lib/rpm/redhat/brp-python-hardlink
++ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: avr-gcc-4.5.1-2.fc12.i686
Esecuzione(%doc) in corso: /bin/sh -e /var/tmp/rpm-tmp.9KQr1h
+ umask 022
+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-gcc-4.5.1
+ DOCDIR=/home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ export DOCDIR
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ /bin/mkdir -p /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ cp -pr gcc-4.5.1/COPYING gcc-4.5.1/COPYING.LIB /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ cp -pr gcc-4.5.1/README README.fedora /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386/usr/share/doc/avr-gcc-4.5.1
+ exit 0
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/sh libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.11) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.7) libc.so.6(GLIBC_2.8) libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libelf.so.1 libelf.so.1(ELFUTILS_1.0) libelf.so.1(ELFUTILS_1.5) libgmp.so.10 libmpc.so.2 libmpfr.so.4 libz.so.1 rtld(GNU_HASH)
Processing files: avr-gcc-c++-4.5.1-2.fc12.i686
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PartialHardlinkSets) <= 4.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1) libc.so.6(GLIBC_2.11) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.3) libc.so.6(GLIBC_2.3.4) libc.so.6(GLIBC_2.4) libc.so.6(GLIBC_2.7) libc.so.6(GLIBC_2.8) libdl.so.2 libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libelf.so.1 libgmp.so.10 libmpc.so.2 libmpfr.so.4 libz.so.1 rtld(GNU_HASH)
Processing files: avr-gcc-debuginfo-4.5.1-2.fc12.i686
Controllo per file scompattato/i in corso: /usr/lib/rpm/check-files /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386
Scritto: /home/mauro/rpmbuild/SRPMS/avr-gcc-4.5.1-2.fc12.src.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-4.5.1-2.fc12.i686.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-c++-4.5.1-2.fc12.i686.rpm
Scritto: /home/mauro/rpmbuild/RPMS/i686/avr-gcc-debuginfo-4.5.1-2.fc12.i686.rpm
Esecuzione(%clean) in corso: /bin/sh -e /var/tmp/rpm-tmp.cCBbVy
+ umask 022
+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-gcc-4.5.1
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-gcc-4.5.1-2.fc12.i386
+ exit 0
[mauro@localhost SPECS]$


Allego i file spec delle binutils e di avr-gcc
Nota che dovete modificare le pacth originali, se non siete in grado metto tutto su tarball e allego.


Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 20, 2012, 11:18 pm
Un po' di domande  :P

1) potresti spiegare passo passo da cosa sei partito e come hai agito?
2) hai provato ad usare questa toolchain per compilare degli sketch tramite l'IDE di Arduino?
3) hai verificato con quali micro (e quindi con quali micro) tutto funziona?
4) lo sketch ArduinoISP funziona?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 12:17 am
Leo per 2,3 e 4 la risposta è no, non ho provato, però so che il compilatore lavora perchè viene compilato in due fasi, e c'è una fase di test durante la compilazione che produce codice per tutti i micro, infatti questa fase veniva condotta con successo per tutti i micro tranne per xmega dal momento che binutils nel mio sistema non conosce come linkare per questi micro. Dopo aver applicato le patch a binutils compilato ed aggiornato la versione presente nel sistema il test per xmega è andato a buon fine ed i pacchetti sono stati creati.

Le risposte 2,3,4 potrei averle ma mi devi dire o dare il tuo ide che di sicuro funziona, ma anche così avrò sicuramente qualche problema con jre, allora dovrei installare quella originale ecc, solo per dire che funziona con arduino. Certamente compilerò i mie programmi con questa toolchain per testarla, ma non prevede il core arduino, uso altre lib.

Nota che ancora devo compilare avr-libc con le pacth di Atmel, ora se mi passa il mal di capa e riesco a concentrarmi ci provo.

Come ci sono arrivato:
I link su avrfreaks, gli script uno in particolare get-pacthes.sh guardandolo all'interno si vede che usa wget per scaricare le pacth allora con il browser sono andato li, anche il file che scarica i pacchetti è stato utile per prendere le binutils 2.20.1 che non trovavo. Ora penso che tu potresti facilmente fare la stessa cosa su ubuntu tranne che li tu hai i .deb ed io non ricordo come si fa ad applicare le pacth, o meglio ricordo che si mettono tutte le pacth in un file con estensione .diff e se questo file e presente quando avvia dpkg questo le applica tutte in toto e poi fa più o meno quello che ha fatto rpmbuild per fedora, cioè applica le pacth avvia la configurazione, compila, ed installa su un percorso di comodo provvisorio e poic mette tutto nel .deb.

Nel mio caso ho preso dal repo di fedora 15 avr-gcc-4.5.3 ed ho provato con questo, ma avevo sempre un problema con le pacth, allora ho trovato sempre in fedora il pacchetto sorgente .src.rpm di avr-gcc-4.5.1 e con questo ho incontrato le stesse difficoltà ad applicare le patch, ho capito il motivo e ho corretto due pacth originali di ATMEL ma solo per portare a termine l'applicazione delle pacth, cioè non ho toccato codice compilabile.
Comunque il pacchetto src.rpm va installato (ma devi avere home rpmbuild inizializata) con rpm -i nomepac, poi cd homerpmbuild/SPEC
e avvio il processo di costruzione del pacchetto così: rpmbuild -ba --target=i686 avr-gcc.spec che crea dei pacchetti binari per arch i686, rpmbuild parsa il file avr-gcc e in base a questo avviengono tutte le fasi necessarie per passare da un sorgente ad uno o più pacchetti binari.

Nel tuo caso tu hai di bisogno di due file, il .dsc e il tar.gz dal repo di ubuntu e provi da questi a creare il pacchetto .deb, se va a buon fine poi sostituisci il tar.gz con la versione del pacchetto sorgente originale di avr-gcc sempre in tar-gz e modifichi leggermente il file .dsc (la modifica e intuitiva) e riavvia la creazione del pacchetto, poi trovi la procedura per pacthare il sorgente prima che si avvia la fase di configure e se va a buon fine allora installi e provi a compilare con Arduino IDE.

Ciao.
Se tu dovessi avere un progetto scritto in C/C++ che posso compilare per testare il problema dei 64k, passamelo che dopo aver compilato avr-libc provo.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 21, 2012, 06:26 am
Ma una domanda. Rispetto ad usare lo script di Avrfreaks, che vantaggi hai avuto? Io con lo script ho compilato correttamente la toolchain però poi non sono riuscito all'atto pratico ad usarla con l'IDE 0022. Ora volevo riprovare con l'IDE 1.0.1RC visto che questa prima cerca di usare la toolchain incorporata.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 09:18 am
Leo, anche tu puoi installare il tutto in automatico, ti basta entrare nella dir dove si trova avr-gcc (nota che viene compilato in sottodirectory, di solito chiamata build) e scrivere make install, il makefile installerà di default in /usr/local e se nel sistema non hai un pacchetto .deb di avr-gcc installato, l'ide richiamerà quello nel path di esecuzione che nel tuo caso si troverà in /usr/local/bin.

Il vantaggio è quello che hai quando trovi nei repo della distrò una pacchetto di aggiornamento, lo installi e provi se non sei contento ritorni alla versione precedente, poi puoi anche installare ad esempio avr-gcc 4.5.1 e avr-libc-1.8.0 al posto della 1.7.1 e provare se non va torni indietro e così via.

Ho provato a creare il pacchetto per avr-libc-1.7.1 con su le pacth di Amel, ma non ha funzionato, il problema è che mancano i makefile.am per le nuove MCU introdotte. Sotto si vede che cerca il makefile.in e non lo trova, anzi non trova proprio la directory con il nome della MCU, ora riprovo a creare delle cartelle con quel nome e vediamo se automake è in grado di creare i makefile.
Code: [Select]
cd . && /bin/sh /home/mauro/rpmbuild/BUILD/avr-libc-1.7.1/missing --run automake-1.11 --foreign
configure.ac:1151: required file `avr/lib/avr35/attiny1634/Makefile.in' not found
configure.ac:1163: required file `avr/lib/avr4/atmega48pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/at90pwm161/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega325pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3250pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3290pa/Makefile.in' not found
configure.ac:1303: required file `avr/lib/avrxmega2/atxmega32x1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega128b1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega256a3bu/Makefile.in' not found
make: *** [Makefile.in] Error 1
[mauro@localhost avr-libc-1.7.1]$ make


ah, dimenticavo, ho compilato con avr-gcc-4.5.1, binutils-2.20.1 e avr-libc-1.6.7 (no atmel patch) e per il 328 ha funzionato senza errori o warning, ma questo me lo aspettavo, c'è da fare la prova con un 1284 o uno di quelle MCU che vedi sotto, questo appena risolvo il problema di avr-libc.



Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 21, 2012, 10:48 am
Ma io ho compilato ed usato la toolchain senza problemi, se rileggi i miei post in questo thread ad un certo punto parlavo proprio del fatto che con i 328 ed i 644 compilavo senza problemi ma non con i Tiny e con la Mega.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 11:43 am
Quote
Ma io ho compilato ed usato la toolchain senza problemi, se rileggi i miei post in questo thread ad un certo punto parlavo proprio del fatto che con i 328 ed i 644 compilavo senza problemi ma non con i Tiny e con la Mega.


Vero, ho riletto tutto (che fatica).

Allora il problema è che io non ho codice che possa compilare su Attiny, comunque quegli errori non sono della toolchain ma del core tiny o meglio non trova le cose nel posto giusto. Io però non ho capito come hai fatto a far vedere la nuova toolchain ad Arduino IDE, quale strada hai scelto, no perchè non basta sistemare il path con la variabile di ambiente, devi anche dire all'ide di usare la avr-libc compilata e dire anche da dove prendere gli header ecc, se hai provveduto a sistemare i file nei posti giusti potrebbe essere che qualcosa non è andata nel verso giusto.

Ora io ho qualche problema con le patch ufficiali di Atmel per avr-libc, o meglio ho risolto manualmente e la compilazione è andata a buon fine senza errori, ma ora devo trovare il modo di creare delle patch da inserire nel file .spec che facciano quello che ho fatto manualmente.

Manualmente è stato sufficiente creare le dir mancanti e prendere un makefile.am da ogni famiglia e metterlo dentro la dir mancante modificando due solo righe, bene ora questa cosa la devo automatizzare, ma non mi ricordo come si usa diff, anzi non mi ricordo il nome tools che usavo al post di diff che fa un lavoro eccellente.

Alla fine avrò la toolchain aggiornata in sincro con Atmel, ma mi mancano i sorgenti per eseguire i test così da verificare che i bug conosciuti sono stati risolti.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 21, 2012, 12:46 pm
Non ho inserito la toolchain Atmel all'interno della cartella dell'IDE perché così non funzionava.

Ho compilato la toolchain con lo script di AvrFreaks e poi ho inserito nella path dei comandi l'indirizzo della cartella dove risiedevano i nuovi binari Avr.
Non capisco però perché compilando per 328 e 644 andava e per Tiny o Mega2560 no. Le librerie, se non le trovava per i secondi, non le avrebbe dovute trovare neanche per i primi.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 01:23 pm
Leo non so risponderti, ma scusa perchè non usi il tasto shift per vedere da dove prende le lib e tutto il resto, certo che se sul sistema l'unico compilatore avr-gcc e quella da te compilata non può che usare questa, stessa cosa per le binutils e le avr-libc.

Studiando le pacth di atmel in particolare quelle per avr-gcc ho notato il bug di cui parlavo proprio tempo fa per attiny, specie per tn85 almeno un registro non si chiama più allo stesso modo e quasi sicuramente tocca ricompilare tutto con la nuova toolchain e sperare che non esca qualche errore.

Buone nuove:
Mentre scrivo ha terminato di creare il pacchetto per le avr-libc:
Code: [Select]

+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-libc-1.7.1
+ DOCDIR=/home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386/usr/share/doc/avr-libc-docs-1.7.1
+ export DOCDIR
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386/usr/share/doc/avr-libc-docs-1.7.1
+ /bin/mkdir -p /home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386/usr/share/doc/avr-libc-docs-1.7.1
+ cp -pr avr-libc-user-manual-1.7.1 /home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386/usr/share/doc/avr-libc-docs-1.7.1
+ exit 0
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Controllo per file scompattato/i in corso: /usr/lib/rpm/check-files /home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386
Scritto: /home/mauro/rpmbuild/SRPMS/avr-libc-1.7.1-2.fc12.src.rpm
Scritto: /home/mauro/rpmbuild/RPMS/noarch/avr-libc-1.7.1-2.fc12.noarch.rpm
Scritto: /home/mauro/rpmbuild/RPMS/noarch/avr-libc-docs-1.7.1-2.fc12.noarch.rpm
Esecuzione(%clean) in corso: /bin/sh -e /var/tmp/rpm-tmp.72DD8s
+ umask 022
+ cd /home/mauro/rpmbuild/BUILD
+ cd avr-libc-1.7.1
+ rm -rf /home/mauro/rpmbuild/BUILDROOT/avr-libc-1.7.1-2.fc12.i386
+ exit 0
[mauro@localhost SPECS]$


Allego lo specfile e la pacth per risolvere la mancanza dei Makefile.am

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 06:25 pm
Dopo aver installato/aggiornato la avr-libc provo a compilare un mio programma e quello che segue è il risultato:
Code: [Select]

make: Entering directory `/home/mauro/Sviluppo/WashingMachine/master-build-desktop'
avr-g++ -c -Wall -Os -fpack-struct -fshort-enums -fno-exceptions -mmcu=atmega328p -save-temps -ffunction-sections -fdata-sections -funsigned-char -funsigned-bitfields -DF_CPU=16000000 -D__AVR_ATmega328P__ -I../../../.avrspecs/mkspecs/linux-avr8-g++ -I../washing_machine_master -I../washing_machine_master -I/usr/avr/include -I../../../.avr/include/mhvlib-08112011 -I. -o main.o ../washing_machine_master/main.cpp
In file included from ../washing_machine_master/main.cpp:7:0:
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h: In function 'void _delay_ms(double)':
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:149:42: error: 'fabs' was not declared in this scope
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:149:43: error: 'ceil' was not declared in this scope
In file included from ../washing_machine_master/main.cpp:7:0:
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h: In function 'void _delay_us(double)':
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:226:42: error: 'fabs' was not declared in this scope
/usr/lib/gcc/avr/4.5.1/../../../../avr/include/util/delay.h:226:43: error: 'ceil' was not declared in this scope
../washing_machine_master/main.cpp: In function 'int main()':
../washing_machine_master/main.cpp:67:102: warning: only initialized variables can be placed into program memory area
make: *** [main.o] Error 1
make: Leaving directory `/home/mauro/Sviluppo/WashingMachine/master-build-desktop'
The process "/usr/bin/make" exited with code 2.
Error while building project master (target: Desktop)
When executing build step 'Make'


Quindi ora mi tocca capire se il bug è in avr-libc o gli altri.
Suggerimenti??

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 06:58 pm
Da quello che leggo la avr-libc-1.7.1 ha un modo nuovo per fare i delay_ms e delay_us, questo nuovo modo però richiede che avr-gcc abbia internamente questa funzione builtin __builtin_avr_delay_cycles(unsigned long), se non c'è la qualcosa va storta, ma non è questo il caso, invece sembra che l'header file utils/delay usi "fabs" e "ceil" che sono funzioni matematiche che si trovano nell'header "math.h" e questo file non è incluso in delay.h, quindi è un bug di avr-libc.

Dal momento che non c'è retrocompatibilità si può ovviare definendo #define __DELAY_BACKWARD_COMPATIBLE__  per usare le vecchie versioni di delay_ms e _us, ma occhio che dovete definirla in ogni sorgente che usa delay prima dell'include, oppure definirla come constante a tempo di compilazione passandola nella riga di comando di avr-gcc.

Ora c'è da vedere se escono altre magagne/novità, sempre bene accette le seconde.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 21, 2012, 11:04 pm
Se il problema è del delay, devi sostituire il file allegato alla toolchain con il file di Arduino. Cerca il post di Astrobeed in cui segnala proprio a me le righe di codice. Non mi ricordo se è in questo o nell'altro thread (quello riguardante l'aggiornamento della toolchain per Windows)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 21, 2012, 11:32 pm
Mi chiedo, ma utenti Linux siamo solo noi due?

Comunque ho risolto il problema con una patch, ma non so se risolve il problema su Arduino core.

Code: [Select]
--- ./include/util/delay.h.in 2012-03-21 22:29:29.000000000 +0100
+++ ./include/util/delay.h.in 2012-03-21 22:30:24.000000000 +0100
@@ -94,6 +94,10 @@ static inline void _delay_ms(double __ms
# warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
#endif

+#if __HAS_DELAY_CYCLES && defined(__OPTIMIZE__) && !defined(__DELAY_BACKWARD_COMPATIBLE__)
+#include <math.h>
+#endif
+
/**
    \ingroup util_delay


Se gcc ha delay cicle builin e se -OS è presente e non è stata definita __DELAY_BACKWARD_COMPATIBLE__ include math.h

Altra cosa, stavo guardando qui http://www.atmel.com/products/microcontrollers/avr/default.aspx?tab=documents (http://www.atmel.com/products/microcontrollers/avr/default.aspx?tab=documents) AVR998 dove c'è PDF e codice che a quanto sembra esegue dei test della memoria, non sono sicuro perchè è da 10 minuti che ho letto rapidamente il PDF e c'è ne ho capito poco, ora vedo il sorgente cosa fà, magari si può usare per testare lettura e scrittura nella flash e ram oltre le 64kword o 128k, alla fine non ho micro per testarla.

Ma tu a che sei, hai risolto qualcosa, sei operativo con la nuova toolchain?

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 22, 2012, 06:43 am
Parto dall'ultima domanda, al momento fra czz e mazzi sono diversi giorni che non riesco a fare prove concrete. Spippolo un po' qui sul PC di lavoro ma non posso fare molte cose, poi ho un po' lasciato perdere perché alla fine nell'attesa di poter studiare con calma il problema (devo terminare un paio di progetti che ho a mezzo).

Il PDF lo leggo con calma, poi ti faccio sapere.

Sul fatto degli utenti Linux, non so il motivo per cui non partecipano, magari per il semplice motivo che non interessa la questione.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 22, 2012, 07:10 am
Veloce occhiata al PDF. O io ne ho trovato un altro oppure quel documento non mi pare che riporti del codice per testare la flash. Ci sono solo indicazioni sui controlli da eseguire per la verifica del dispositivo. Però mi pare che si basi sul fatto che puoi accedere a prescindere a tutta la memoria del micro, non mi pare si ponga il problema se effettivamente hai codice che può accedervi o no.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: dab77 on Mar 22, 2012, 10:49 am

Parto dall'ultima domanda, al momento fra czz e mazzi sono diversi giorni che non riesco a fare prove concrete. Spippolo un po' qui sul PC di lavoro ma non posso fare molte cose, poi ho un po' lasciato perdere perché alla fine nell'attesa di poter studiare con calma il problema (devo terminare un paio di progetti che ho a mezzo).

Il PDF lo leggo con calma, poi ti faccio sapere.

Sul fatto degli utenti Linux, non so il motivo per cui non partecipano, magari per il semplice motivo che non interessa la questione.

Eccolo un altro linuxaro, e vi sto seguendo ad ogni post, ma purtroppo non posso aiutarvi causa mancanza tempo per smanettare..
oltretutto per fare prove ho a disposizione oltre i 328P, solo attiny85 e un Mega1280. quindi non sarei molto d'aiuto.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 22, 2012, 11:40 am
Ciao dab77, anche io non ho solo 168,328 e 644, ci vorrebbe chi ha uno di questi micro per testare la toolchain:

avr35 attiny1634
avr4 atmega48pa
avr5 at90pwm161 atmega325pa atmega3250pa atmega3290pa
avrxmega2 atxmega21x1
avrxmega6 atxmega128b1 atxmega256a3bu

Dab77, tu su che distrò lavori?

Questi sono stati introdotti con le patch di Atmel, queste inoltre risolvono il problema del 2560 almeno in parte. Per il problema che si verifica scrivendo o leggendo su flash dopo i 128k le cose stanno come ha detto legacy, in quanto c'è già tanto codice nella 4.7.0 e si può pensare che riescano a sistemare le cose nella seguente release, anche perchè è dalla 4.6.3 che ci lavorano. Guardando il codice delle patch di atmel mi sembra di capire che in parte si sono mossi nella stessa direzione, ma non sono riuscito a trovare traccia del "registro a 24bit che invece si vede nella 4.7.0.

@Leo
Il codice c'è, basta andare a link e cliccare sul l'icona del compat disc che si trova accanto a quella del pdf, comunque mi sono arenato con quel codice perchè c'è un po asm inline e io non sono in grado di convertirlo da IAR ad asm gcc, lo metto qui tra code non si sa mai ci sia qualcuno che ne sa qualcosa.

Code: [Select]

char __low_level_init()
{
  /* RO to R31 stuck test
     Move data between register
     R31, R30, R29, R28 and R27 are tested before
     to be reuse after during the test  */
 
      //   R31 stuck test
__asm("R31_0x55_TST:                              \n"
      "               ldi  R31, $55               \n"
      "               cpi  R31, $55               \n"
      "               breq  R31_0xAA_TST          \n" 
      "               jmp  Failure                \n"
      "R31_0xAA_TST:  ldi  R31, $AA               \n"
      "               cpi  R31, $AA               \n"
      "               breq  R30_0x55_TST          \n" 
      "               jmp  Failure                \n"
);

      //   R30 stuck test
__asm("R30_0x55_TST:  ldi  R30, $55               \n"
      "               cpi  R30, $55               \n"
      "               breq  R30_0xAA_TST          \n" 
      "               jmp  Failure                \n"
      "R30_0xAA_TST:  ldi  R30, $AA               \n"
      "               cpi  R30, $AA               \n"
      "               breq  R28_0x55_TST          \n"
      "               jmp  Failure                \n"
);

      //   R29 stuck test
__asm("R29_0x55_TST:  mov R31, R29     ; save R29 \n"   
      "                ldi  R29, $55              \n"   
      "               cpi  R29, $55               \n"
      "               breq  R29_0xAA_TST          \n"
      "               jmp  Failure                \n"
      "R29_0xAA_TST:  ldi  R29, $AA               \n"
      "               cpi  R29, $AA               \n"
      "               breq  R29_END_TST           \n" 
      "               jmp  Failure                \n"
      "R29_END_TST:   mov R29, R31  ; restore R29 \n"
);

      //   R28 stuck test
__asm("R28_0x55_TST:  mov R31, R28     ; save R28 \n"
      "               ldi  R28, $55               \n"
      "               cpi  R28, $55               \n"
      "               breq  R28_0xAA_TST          \n" 
      "               jmp  Failure                \n"
      "R28_0xAA_TST:  ldi  R28, $AA               \n"
      "               cpi  R28, $AA               \n"
      "               breq  R28_END_TST           \n" 
      "               jmp  Failure                \n"
      "R28_END_TST:   mov R28, R31  ; restore R28 \n"   
);


      //   R27 stuck test
__asm("R27_0x55_TST:                              \n"
      "               ldi  R27, $55               \n"
      "               cpi  R27, $55               \n"
      "               breq  R27_0xAA_TST          \n" 
      "               jmp  Failure                \n"
      "R27_0xAA_TST:  ldi  R27, $AA               \n"
      "               cpi  R27, $AA               \n"
      "               breq  R27_END_TST           \n" 
      "               jmp  Failure                \n"
      "R27_END_TST:                               \n"   
);


      // R0 to R27 stuck test
__asm("RX_TST:        ldi  R30,$00                \n"
      "               ldi  R31,$00                \n"
      "RX_0x55_TST:   ldi  R27,$55                \n"
      "               st  Z,R27                   \n"
      "               ldi  R27,$00                \n"
      "               ld  R27,Z                   \n"
      "               cpi  R27,$55                \n"
      "               breq  RX_0xAA_TST           \n"
      "               jmp  Failure                \n"
      "RX_0xAA_TST:   ldi  R27,$AA                \n"
      "               ST  Z,R27                   \n"
      "               ldi  R27,$00                \n"
      "               ld  R27,Z+                  \n"
      "               cpi  R27, $AA               \n"
      "               breq  RX_TST_2              \n"
      "               jmp  Failure                \n"
      "RX_TST_2:      cpi  r30,27 ; test until R27 \n"
      "               brne  RX_0x55_TST           \n"
);

  // Stack pointer Stuck Test (16 bit Stack pointer)
  // Save SP values
__asm("SP_TST:        in    R23,$3E               \n"
      "               in    R22,$3D               \n"
      "SPL_0x55_TST:  ldi   R24,$55               \n"
      "               out   $3D,R24               \n"
      "               in    R24,$3D               \n"
      "               cpi   R24,$55               \n"
      "               breq  SPL_0xAA_TST          \n"
      "               jmp   Failure               \n"
      "SPL_0xAA_TST:  ldi   R24,$AA               \n"
      "               out   $3D,R24               \n"
      "               in    R24,$3D               \n"
      "               cpi   R24,$AA               \n"
      "               breq  SPH_0x55_TST          \n"
      "               jmp   Failure               \n"
      "SPH_0x55_TST:  ldi   R25,"SPH_MASK
      "               andi  R25,$55               \n"
      "               out   $3E,R25               \n"
      "               in    R24,$3E               \n"
      "               cp    R24,R25               \n"
      "               breq  SPH_0xAA_TST          \n"
      "               jmp   Failure               \n"
      "SPH_0xAA_TST:  ldi   R25,"SPH_MASK
      "               andi  R25,$AA               \n"
      "               out   $3E,R25               \n"
      "               in    R24,$3E               \n"
      "               cp    R24,R25               \n"
      "               breq  RESTORE_SP            \n"
      "               jmp   Failure               \n"
      "RESTORE_SP:    out   $3E,R23               \n"
      "               out   $3D,R22               \n"
      "               rjmp  ALL_TEST_OK           \n"
);


     // stop here on failure
     // replace by an exit if necessary
__asm("Failure:        jmp   Failure              \n"
      "ALL_TEST_OK:                               \n"
);

  return 1;
}


Ciao.


Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 22, 2012, 12:53 pm
legacy ha spiegato bene. Aggiungo solo che, se non ricordo male ciò che ho letto su AvrFreaks, la questione dei puntamenti a zone di flash >128kB è stato risolto in avr-gcc usando 3 registri combinati insieme per avere i 24 bit necessari a poter "saltare" nelle zone alte della memoria.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 22, 2012, 01:53 pm
Quote
Non c'e' un registro a 24 bit esplicito come nelle architetture a 32bit flat memory, in avr8-xmega si combinano 4 registri per formare un registri a 32bit, e si hanno due possibilita' di farlo, con registri "combinati" chiamati regV e regW


Esatto, si capisce che non c'è un registro lungo 24 bit infatti ho dimenticato di chidere apici (ma non sono riuscito a trovare traccia del "registro a 24bit). Dicevo che nel ramo 4.7.0 c'è codice e si vede la formazione di questo "registro" a 24 bit, mentre nelle patch di Atmel io non l'ho trovato, devo controllare se hanno toccato LPM o come si chiama insomma la builtin per scrivere e leggere in flash.

legacy le vuoi tutte le patch che ho applicato a avr-gcc & company, poi tu le applichi a manina e compili, ma anche se non compili già puoi dare una lettura a gcc con le patch applicate, poi per te creare un file scriverci dentro e montarlo in loop non è un problema, io mi incasino con le versioni e mi ritrovo sempre codice compilato con la versione sbagliata. Però hai scritto che passi a SDCC, io ci avevo provato ma la riga di comandi non mi piace, ho avuto difficolta con il generatore di makefile e ho lasciato perdere perchè mi scocciava trovare una soluzione.

Quel codice asm inline viene da mamma Atmel ed è scritto per IAR, per me adattarlo a gcc non è un problema ci si impiega 10 minuti, ma non mi sono mai trovato codice asm IAR e non so come funziona. Quel codice di test e standard e ci sono anche test per la ram la eeprom ecc, ecco io volevo provarlo. Per il discorso superamente dei 128k io non ho chip con flash così grande.

Per me la nuova toolchain lavora, ma anche la vecchia quindi io non posso apprezzare differenze se non quelle teoriche, cioè supporto per xmega e gli altri chip di cui al momento non me ne faccio nulla.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 22, 2012, 02:53 pm
@Legacy
Concordo in pieno, comunque quel pezzo di asm come si intuisce dal nome della funzione serve solo come inizializzazione dei registri tutto il resto e C, compreso il test in flash e lo volevo usare perchè è standard e poi eventualmente aggiungerci altro se necessario.

Conosco la tecnica del mounting volume, tutte le liveCD ecc la usano, ma nel formato compresso es suse usa Cloop (kernel module) fedora usa squashfs, questa tecnica è alla base dell'avvio di ogni distro, prima si monta initrd in ram e questo poi monta in sola lettura root ecc, ovviamente ci sono un mare di varianti. Quindi io ho abbandonato quella tecnica che mi incasinava di più, forse però non sono stato capace di renderla automatica e chiara per questo.

Un momento però con quell'env tu stabbilisci che CC= avr-gcc e come fai se vuoi compilare usando anche gcc, cioè devi sempre switchare, io mi ritrovo spesso con due ide aperti uno con codice per avr e l'altro per 386, boh per ora mi scoccia trovare una soluzione vado avanti così. Però ora che ci penso posso montare un volume diverso secondo necessità con dentro installati i pacchetti binari generati in modo standard, non è male la soluzione, ma mi scoccia lo stesso.  :P

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 22, 2012, 04:15 pm
Ecco come lo hai fatto tu è meglio, per sbagliare si deve essere morti dal sonno. Però sei costretto a lavorare con le shell aperte e io che uso L'ide dovrei avviarlo da li, si può fare non è male come idea, poi l'avvio dal menù di gnome usa gcc nativo. Appena ho un po di tempo vediamo che riesco a combinare.

Quote
Ma non volevi testare se il codiche che esce dalla toolchain procuce un eseguibile in cui la flash e' indirizzata nel modo corretto e se i salti funzionano nel modo corretto ? Secondo me basta un address-in-address test piu' un far-jump per dirlo, e senza fare altro, lo provi cosi' come e' e vedi come si comporta la toolchain, se inizia a toppare si "indaggina" meglio e si prendono provvedimenti.

Io non lo posso fare perche' non ho hw sottomano ne mi interessa averlo nell'immediato: ho solo 644 in produzione, ho solo quei chip qui.


Si notte :D...., non leggi, io sono nelle stesse condizioni non ho hardware per testare, cioè ho solo 168, 328, 644 e solo chi ha il 2560 può verificare, magari io posso compilare per questo ma altri devono verificare. Quel doc e codice mi è capitato davanti per caso e gli ho dato uno sguardo e lo messo dentro anche perchè quel test ripeto è standard ed è da eseguire in produzione, quindi, si basta fare come dici tu.

Ciao.

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 22, 2012, 05:46 pm

non ho idea se quello che ha riportato leo sia gia' stato applicato al ramo 4.5.1, io so che verra' applicato al 4.7.x,

Di default, solo avr-gcc ramo 4.7.x implementerà questa cosa.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: dab77 on Mar 22, 2012, 09:19 pm

Ciao dab77, anche io non ho solo 168,328 e 644, ci vorrebbe chi ha uno di questi micro per testare la toolchain:

avr35 attiny1634
avr4 atmega48pa
avr5 at90pwm161 atmega325pa atmega3250pa atmega3290pa
avrxmega2 atxmega21x1
avrxmega6 atxmega128b1 atxmega256a3bu

Dab77, tu su che distrò lavori?
........
Ciao.

Ho una ubuntu 10.04, kernel pae.e non mi stacco neanche morto da gnome 2. quindi ho un ambiente standard su cui testare, mi manca il tempo per adesso, ma tra un pò mi metterò a testare volentieri.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 22, 2012, 10:32 pm
Quote
Ho una ubuntu 10.04, kernel pae.e non mi stacco neanche morto da gnome 2. quindi ho un ambiente standard su cui testare, mi manca il tempo per adesso, ma tra un pò mi metterò a testare volentieri.


Io se legacy è disposto a condividere farei quello che ha fatto lui, cioè in pratica si applicano le path si compila e si installa su file system ext, poi questo file si monta in loop device e da shell si avvia arduino, così L'ide vede un /usr/avr e /usr/bin che sono quelli presenti nel file montato.

Purtroppo neanche tu hai hardware per fare il test, perchè anche la mega con il 1280 ha solo 128K, ma che fine hanno fatto quelli che hanno la Mega?

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 23, 2012, 12:25 am
mmmmmmmmmm.... mi fate una cortesia, mi controllate se nel file avr/io c'è definito __AVR_ATmega168PA__,  perchè nella 1.7.1 con patch Atmel non c'è, nel caso l'aveste mi postate qui le righe del 168, così visto che ci sono faccio la patch, avr-libc-1.7.1-missin_168pa.patch.

Ciao.

Visto che ci siete a me manca anche il 164PA. Il __AVR_ATmega1284P__ c'è ma manca __AVR_ATmega1284__ senza la P.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 23, 2012, 06:40 am
FYI:
http://gcc.gnu.org/gcc-4.7/
:)
queste le modifiche della nuova versione:
http://gcc.gnu.org/gcc-4.7/changes.html
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 23, 2012, 07:28 am

mmmmmmmmmm.... mi fate una cortesia, mi controllate se nel file avr/io c'è definito __AVR_ATmega168PA__,  perchè nella 1.7.1 con patch Atmel non c'è, nel caso l'aveste mi postate qui le righe del 168, così visto che ci sono faccio la patch, avr-libc-1.7.1-missin_168pa.patch.

Se per avr/io intendi /avr/include/avr/io.h no, non c'è.

Quote


Ciao.

Visto che ci siete a me manca anche il 164PA. Il __AVR_ATmega1284P__ c'è ma manca __AVR_ATmega1284__ senza la P.

Manca.

PS:
parlo della toolchain AVR.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 23, 2012, 07:29 am

FYI:
http://gcc.gnu.org/gcc-4.7/
:)
queste le modifiche della nuova versione:
http://gcc.gnu.org/gcc-4.7/changes.html

Finalmente!!! Uscita proprio ieri.
Allora in questi giorni formatto tutto e torno ad Arch  ;)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 23, 2012, 05:50 pm
Io per adesso vado avanti con questa, ma poi più in là voglio fare quello che ha fatto legacy per le toolchain, così da avere più toolchain in un colpo solo a scelta e ovviamente proverò questa versione. Però non so se è il caso di aspettare la 4.7.2.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 23, 2012, 06:45 pm
:) @Mauro poi ci sarà la 4.7.3, poi la 4.7.4 ecc....
la cosa migliore quando si fanno esperimenti è quella di avere sempre l'ultima versione (quando si lavora seriamente, magari la penultima :D )
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: testato on Mar 23, 2012, 10:44 pm

FYI:
http://gcc.gnu.org/gcc-4.7/
:)
queste le modifiche della nuova versione:
http://gcc.gnu.org/gcc-4.7/changes.html

thanks
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 24, 2012, 05:54 pm
avr-gcc 4.7.0, avr-lib 1.8.0 e binutils-avr 2.22 sono già arrivati nei repo di ArchLinux (ramo testing). Qualcuno li ha provati? Hanno dei problemi? Hanno risolto tutti i bug (delay, mem>128, millis, ecc..)?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 24, 2012, 06:58 pm
Quote
@Mauro poi ci sarà la 4.7.3, poi la 4.7.4 ecc....


Vabbe non mi dire  :P

Mi  è venuto autometico pensare che le realase minor release fossero quelle stabili e quelle dispari no, ma quello forse è per il kernel.

Ciao
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 24, 2012, 09:17 pm

Mi  è venuto autometico pensare che le realase minor release fossero quelle stabili e quelle dispari no, ma quello forse è per il kernel.

Era. Non lo è più.


il numero giusto per me e' 4.7.1, io aspetto quel rilascio, prima secondo me e' un po' prematuro e anche se nel changes note della 4.7.0 vedete gia' introdotto il name-spaces ip penso, da quanto leggo nei commenti e parlando con gente, che ci sono molte fin troppe situazioni in cui quella tecnica ancora non e' rodata per bene.

Questo per quanto riguarda il bug della flash. Ma per gli altri problemi menzionati, queste release sai se funzionano "out of the box" oppure hanno sempre bisogno di una "sistemata"?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 26, 2012, 06:37 pm
Stamani ho terminato la formattazione del mio sistema, rimettendo Arch Linux dopo circa 1 anno.
Nei repo ufficiali stabili è presente la seguente toolchain:
avr-gcc 4.6.3
avr-libc 1.8.0
binutils-avr 2.22

Installando questa toolchain, la compilazione dello sketch Delay porta alla sfilza di errori data dal file delay.h
Ho quindi aperto il file /usr/avr/include/avr/delay.h editandolo come suggerito da Astro ma poi lo sketch non funziona. Quella toolchain non contiene nessuna patch ed ha ancora il vecchio bug delle funzioni temporali buggate, con il led 13 che resta perennemente acceso (bug relativo a binutils-avr 2.22, la versione 2.20 è esente). Mettendo la dichiarazione di una variabile globale e la relativa assegnazione di un valore qualsiasi nel setup() (il vecchio rimedio a questo bug), lo sketch torna a funzionare ma i tempi sono tutti sballati, con il led che lampeggia alla velocità della luce  :smiley-roll-sweat:

Ergo, la toolchain dei repo di Arch non è usabile. A questo punto, provo direttamente quella di Atmel.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 26, 2012, 07:10 pm
Ho invece trovato una cosa interessantissima. Nel repo AUR, che è in pratica un repo contenente pacchetti preparati da utenti, ci sono i file PKGBUILD (che servono per compilare i pacchetti veri e propri) avr-libc, binutils-avr e avr-gcc con le patch Atmel!

Cerco di spiegare per chi non conosce Arch Linux. Questa distribuzione , accanto a pacchetti con binari precompilati, come Gentoo permette di compilare il software direttamente dai sorgenti con dei file PKGBUILD che contengono le istruzioni per la compilazione. Guardando dentro a questi PKGBUILD ho notato che l'autore ha fatto in pratica ciò che fa lo script scaricabile da AvrFreaks, cioè preleva i sorgenti, poi scarica le patch Atmel, le applica ed infine compila i pacchetti. Con in più la cosa che cercavo, ossia che venendo creato un pacchetto per il mio sistema, installo e disinstallo con 2 semplici comandi da terminale ed i file vanno dove devono andare, senza tanti sbattimenti. Ora, se le patch sono presenti nella loro totalità, i bug della toolchain dovrebbero essere risolti tutti....  XD

Ho terminato la compilazione. L'unico errore ricevuto è quello del file delay.h, che ho risolto però con la modifica di astrobeed. Ho provato la compilazione per tutte le board virtuali che ho, e cioè: Attinyx5, Attinyx4, Attiny2313, Atmega644/1284, Arduino, Luigino, Mega2560, Atmega168 standalone, Atmega328 standalone ed altre schede. E' andato tutto alla prima, senza intoppi. Lo sketch Blink uploadato sull'Arduino UNO funziona regolarmente senza problemi.

Potrei gridare EUREKA?  XD
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: brainbooster on Mar 26, 2012, 07:40 pm
Alla fine cel'hai fatta :) ai provato anche a compilare qualcosa con memoria oltre il "limite fatale"?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 26, 2012, 08:35 pm
Quote
@leo mi posti il PKGBUILD, gcc, binutils, e avr-libc ? thks


Credo si tratti di questo https://aur.archlinux.org/packages.php?ID=57791 (https://aur.archlinux.org/packages.php?ID=57791)

Se clicchi sul Tarball scarica tutto, mentre se clicchi su PKGBUILD ti mostra lo script di BUILD

@Leo
mi dispiace dirti che quel build delle avr-libc applica solo due delle patch presenti nel sito di atmel, tra l'altro credo che le patch sono già nel tar.gz che scarichi.

Le altre patch io le ho applicate, se vuoi puoi provare e sufficiente che scarichi le patch di atmel e le metti nella cartella dove risiede il build e ricompili, tutti i file che terminano con nome .patch verranno applicate come si vede da PKGBUIL.

Code: [Select]

for file in ${srcdir}/*.patch; do
    echo "Patching with $file"
    patch -p0 < $file
  done


se provi però incontrerai un errore di compilazione che ho risolto con una patch, fa sapere che te la spedisco.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 26, 2012, 10:08 pm
@legacy:
come ti ha indicato Mauro, i PKGBUILD li trovi nel repo AUR. Per tua comodità te li ripropongo qui sotto:
avr-gcc-atmel (https://aur.archlinux.org/packages.php?ID=57789)
avr-libc-atmel (https://aur.archlinux.org/packages.php?ID=57791)
avt-binutils-atmel (https://aur.archlinux.org/packages.php?ID=57788)

@Mauro:
non ho controllato con accuratezza se scarica tutte le patch. Comunque non è un problema, se manca qualche patch. So costruire i file PKGBUILD per il repo di AUR, se manca qualcosa posso sistemarlo io e magari mettere online la versione corretta.
Ah, le patch non sono nel tar che scarichi. L'archivio contiene solo il PKGBUILD. Tutto viene tirato giù al momento della compilazione, a cominciare dai sorgenti.

@Brain:
non ho sketch al momento che occupino così tanta Flash.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 27, 2012, 12:09 am
@Mauro:
ho controllato il motivo per cui non sono presenti tutte le patch in avr-libc-atmel: perché sono patch per alcuni micro che non sono presenti nel resto della toolchain. Aggiungendo tali patch, ricevo poi errori in fase di compilazione, errori che il compilatore attribuisce proprio a questo:
Code: [Select]

configure.ac:1151: required file `avr/lib/avr35/attiny1634/Makefile.in' not found
configure.ac:1163: required file `avr/lib/avr4/atmega48pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/at90pwm161/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega325pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3250pa/Makefile.in' not found
configure.ac:1186: required file `avr/lib/avr5/atmega3290pa/Makefile.in' not found
configure.ac:1303: required file `avr/lib/avrxmega2/atxmega32x1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega128b1/Makefile.in' not found
configure.ac:1327: required file `avr/lib/avrxmega6/atxmega256a3bu/Makefile.in' not found

A me comunque va bene così, in attesa di provare avr-gcc 4.7, che però ho nel ramo testing per cui disponibile sì ma con tutti i rischi del caso.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 27, 2012, 12:25 am
Si leo lo avevo scritto, questi micro sono presenti in avr-gcc e in avr-libc, mancano solo i makefile.am per compilare il codice.

Se non ti serve usare quei micro non devi appliccare quelle patch ovviamente, ma ricorda che in binutils e avr-gcc devono anche loro essere presenti, probabilmente gli altri build non includono questi micro per cui se devi aggiungerli devi applicare tutte le patch atmel per avr-gcc & company, e se lo fai ti ritrovi con questo intoppo.

Fai un fischio che ti, aspe che l'allego.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 27, 2012, 09:17 am
Ora ricompilo con la tua patch. Vediamo che dice...  ;)

EDIT:
sì è incocciato  :smiley-sweat:

Code: [Select]
Making all in avr
make[3]: Entering directory `/home/leo/Documenti/Arch/ToolchainAvr/avr-libc-atmel/src/avr-libc-1.7.1/include/avr'
make[3]: *** Nessuna regola per generare l'obiettivo «io90pwm161.h», necessario per «all-am».  Stop.
make[3]: Leaving directory `/home/leo/Documenti/Arch/ToolchainAvr/avr-libc-atmel/src/avr-libc-1.7.1/include/avr'
make[2]: *** [all-recursive] Errore 1
make[2]: Leaving directory `/home/leo/Documenti/Arch/ToolchainAvr/avr-libc-atmel/src/avr-libc-1.7.1/include'
make[1]: *** [all-recursive] Errore 1
make[1]: Leaving directory `/home/leo/Documenti/Arch/ToolchainAvr/avr-libc-atmel/src/avr-libc-1.7.1'
make: *** [all] Errore 2
==> ERRORE: Si è verificato un errore in build().
    L'operazione sta per essere interrotta...
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 27, 2012, 09:28 am
Ho riprovato ed ha compilato.... questa poi...  :smiley-eek:

Ora controllo che sia tutto a posto, però.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 27, 2012, 11:00 am
Se a qualcuno interessa, in allegato rimetto il tar.gz contenente il PKGBUILD modificato per compilare avr-libc che scarica ed applica tutte le patch Atmel per avr-libc, la patch di Mauro per modificare il makefile affinché compili per tutti i micro e la mia patch che modifica il file delay.h originale affinché l'IDE di Arduino non dia errore durante la compilazione degli sketch che usano le funzioni temporali.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Mar 27, 2012, 12:14 pm
Leo la patch per il delay vale per i soli utenti di Arduini Ide e core perchè correge un problema interno al core. Poi dovresti avere anche dei problemi nel compilare sketch che usano _delay_ms() e non mi spiego come mai non si verificano nel tuo caso, in pratica c'è una funzione alternativa per creare delay e questa richiede le funzioni fabs e ceil e nell'header delay.h non c'è include per math.h.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Mar 27, 2012, 02:59 pm
Sì, la patch vale solo per utenti di Arduino perché altrimenti dalla toolchain ci si aspetta quel file.

Sul fatto che non si verifichi quel bug non so. Stando a quanto aveva detto anche astro, ci voleva l'include di 2 librerie per far funzionare le funzioni temporali ma a me lavorano senza intoppi anche senza senza. Ho preso lo sketch Blink, che usa il delay, l'ho compilato senza errori e poi l'ho uploadato sulla mia UNO, e gira senza problemi, lampeggiando come deve.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Apr 03, 2012, 10:30 pm
Sono emozionato... in Arch è arrivata la toolchain Avr con avr-gcc 4.7.0 nel repo del ramo stabile....  
Ora aggiorno e vediamo un po'....  

EDIT:
come non detto, l'emozione gioca brutti scherzi. E' la toolchain Gnu, non Avr, quindi gcc/binutils/glibc. Però è un buon segno, se è arrivato questo "blocco", il blocco Avr penso che sia di lì a venire, ormai. Attendo con impazienza  :D
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Apr 24, 2012, 11:27 am
Da qualche giorno è arrivata nei repo Arch la toolchain Avr aggiornata alla versione 4.7 di avr-gcc. Spinto dalla curiosità ho disinstallato la precedente toolchain Atmel e messa questa.

Errori:
1) delay.h
questo è l'ormai famoso errore riguardante le funzioni delay della toolchain che sono differenti da quelle presenti nel core Arduino. Si corregge editando il file /usr/avr/include/avr/delay.h e commentando la riga
Code: [Select]
#include <util/delay.h>

2) unknown name type: prog_uint8_t
questo errore compare su alcuni core (tipo il Tiny) che non hanno la definizione del tipo per la gestione con PROGMEM dell'unsigned char. Basta aprire il file pins_arduino.h contenuto in hardware/xxxx/core/xxxx (sostituire ad xxxx il core interessato, es.: tiny o 1284 o quel che è) e cambiare intorno alle righe 60-70 tutte le occorrenze di prog_uint8_t con
Code: [Select]
PROGMEM uint8_t

3) errore bastardo! error: attempt to use poisoned "SIG_USART1_RECV"
Questo errore viene fuori praticamente con tutti i core riguardanti i chip che hanno più di una seriale. Ciò è dovuto al fatto che in avr-libc 1.8 è stata inserita una lista di definizioni deprecate, che vengono messe "alla gogna" dal compilatore nel caso il flag _AVR_LIBC_DEPRECATED_ENABLE__ (come in avr-libc 1.8) risulti attivo.
Questa lista di definizioni deprecate comprende anche tutti i vettori delle seriali definiti con SIG_USARTx_RCV che, nella nuova versione, sono invece definiti con USARTx_RX_vect
Spippolando su internet ho trovato che un fix temporaneo è quello di editare il file HardwareSerial.cpp del core in uso e modificare le occorrenze così:
Code: [Select]
//#if defined(SIG_USART1_RECV)
#if defined(USART1_RX_vect)

(maggiori info qui (http://arduino.cc/forum/index.php?action=printpage;topic=92364.0))

Continuo il lavoro....
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Apr 24, 2012, 11:52 am
La cosa è un po' "pacco", nel senso che ho dovuto metter mano a tutti i file HardwareSerial.cpp e togliere tutte le occorrenze incriminate perché un semplice test #if defined() dava comunque l'errore visto che la definizione "avvelenata" non può essere in alcun modo toccata. La cosa positiva è che i vari core già erano predisposti perché c'erano nelle librerie i test per entrambe le definizioni.

Attualmente sembra che tutto funzioni. Adesso vorrei fare una prova con il famigerato bug dei 64kB. Ora ricerco lo sketch di astrobeed e lo compilo...
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Apr 24, 2012, 12:00 pm

Attualmente sembra che tutto funzioni. Adesso vorrei fare una prova con il famigerato bug dei 64kB. Ora ricerco lo sketch di astrobeed e lo compilo...


Questa poi... ho caricato lo sketch, ho scelto Arduino Mega2560, ho cliccato su "compile" e mi è venuto fuori questo errore:
Quote
avr-gcc: error: unrecognized command line option '-assembler-with-cpp'

E da chi l'ha avuto quel parametro? Gliel'ha passato l'IDE? E perché sul Blink non l'ha passato?

Ora devo uscire (dentista + lavoro) non ho tempo per indagare, se qualcuno vuol fare qualche prova e far sapere qui cos'ha ottenuto, possiamo confrontare le gioie ed i dolori  :smiley-zipper:
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Apr 29, 2012, 05:55 pm
Non ci siamo.... la toolchain Avr basata su avr-gcc 4.7 è un PACCO.
Oggi per caso, sviluppando la funzione delaySeconds, mi sono accorto che avr-binutils 2.22 è ancora affetta dal famigerato bug di delay/millis che non fa avanzare le funzioni temporali di Arduino. Pazzesco!  :0

Ho rimesso la toolchain con le patch Atmel.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: menniti on Apr 29, 2012, 06:58 pm
Sei tanto ostinato che prima o poi ce la farai e leggeremo il tanto sospirato EUREKA! XD
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Sep 06, 2012, 12:59 pm
Disponibile la nuova toolchian per Linux 3.4.1 --> http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx
Contiene:
AVR 32-bit GNU Binutils 2.22 - Binary utilities for AVR 32-bit target (including assembler, linker, etc.)
AVR 32-bit GNU Compiler Collection (avr32-gcc) 4.4.3 - C language and C++ language compiler for AVR 32-bit target.
Newlib (for AVR 32-bit) 1.16.0 - Standard C Library for AVR 32-bit

Codice sorgente disponibile qui --> http://distribute.atmel.no/tools/opensource/Atmel-AVR-Toolchain-3.4.1/avr32/

@Leo:
Binutils dovrebbe essere patchato.  :smiley-roll-sweat:
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 06, 2012, 10:25 pm
Uhm... non sapevo di questa nuova toolchain ufficiale Atmel... son curioso di provarla....
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 06, 2012, 10:53 pm
2 note dolenti:
1) il .tar.gz con i binari compilati è inscaricabile: arriva un archivio corrotto di un'ottantina di byte. Bisogna prelevare i sorgenti da
http://distribute.atmel.no/tools/opensource/Atmel-AVR-Toolchain-3.4.1/avr/
e poi compilarli (devo ancora finire il download)

2) resta il bug dell'accesso a dati posti oltre il limite dei 128 kB:
Quote
For Mega and Xmega devices, program memory images beyond 128KBytes have limitations and may not work
for few cases
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 06, 2012, 11:16 pm
Uhm... o sono io stanco oppure le istruzioni per compilare i sorgenti sono molto fumose.... qualcuno ha capito come fare?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Sep 06, 2012, 11:38 pm

Uhm... o sono io stanco oppure le istruzioni per compilare i sorgenti sono molto fumose.... qualcuno ha capito come fare?


Forse siamo stanchi entrambe, ma il SOURCES.README lascia a desiderare. Comunque mi pare di capire che puoi scaricare i sorgenti da loro (forse già patchati) oppure patchare i sorgenti vanilla dei rispettivi sviluppatori, cioè sarebbe a dire scaricare gcc-4.6.2 e applicare le patch di atmel, stessa cosa per tutti gli altri pacchetti sorgente vanilla. Come vedi le patch sono cresciute di numero quindi ci hanno lavorato parecchio, ma al momento potrebbe essereci ancora il problema dei 128kb. Quindi io dico che è meglio aspettare la nuova release, tanto quella precedente di atmel va bene almeno per me lavora tranquillamente.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 12:23 pm
Aggiornamento.
Adesso sto usando la toolchain ufficiale Atmel 3.4.1. Quella precompilata da Atmel, però. Perché compilare i sorgenti è un calvario: ci sono diverse cose da aggiungere sul sistema, e non mi andava di installare centinaia di MB di roba  :smiley-sweat:
Ho aspettato 1 giorno ed i link ora funzionano, sia quelli a 32 che a 64 bit.

Riassumo come fare:

1) andare a questa pagina:
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx

2) scegliere la toolchain AVR8 (l'AVR32 è per i micro a 32 bit) compatibile con l'architettura del proprio SO (a 32 o 64 bit)

3) riempire il form con i dati richiesti: mettete un indirizzo e-mail real perché altrimenti non vi arriva il link  :P. Per "Company" mettete quel che vi pare, io ho messo "MyHome"  :smiley-yell:

4) aprite il vostro client di posta. Dopo qualche minuto arriva un messaggio con un link da cliccare per confermare la registrazione. Questo vi porta alla pagina di download

5) una volta scaricato il pacchetto (sono circa 80 MB), scompattatelo.

6) Adesso va sostituita alla toolchain distribuita con l'IDE 1.x. Aprite la cartella dove avete l'IDE di Arduino (normalmente arduino-1.0.1) ed entrate in /hardware/tools

7) dentro a questa cartella ne trovate una denominata /avr: questa contiene la toolchain distribuita con l'IDE. Rinominatela in /avr.old.

8) create una nuova cartella /avr ed entrateci. E' vuota, in questo momento.

9) ora entrate nella cartella dove si sono scompattati i binari della toolchain che avete scaricato (punto 5) e copiate tutte le sottocartelle presenti nella nuova cartella /avr che avete creato al punto 8.

10) un'ultima modifica se usate il core Tiny. Entrate in /hardware/tiny/cores/tiny ed editate il file wiring.h. Intorno alla riga 136 commentate la riga che inizia con #define round(x) in modo che alla fine risulti così:
Code: [Select]
//#define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
Questa modifica (che forse dovrete replicare anche sui file wiring.h di altri core, se ne avete) serve per sistemare un bug sulla gestione di questa funzione matematica, funzione che si replica nel delay.h a causa dell'include della libreria matematica che c'è in questo file.

Un solo bug, per ora. Ancora non sono riuscito a compilare lo sketch di test del bug dei 64 kB che aveva preparato tempo fa astrobeed. Compilando per Atmega2560 ottengo:
Code: [Select]
avr-gcc: error: unrecognized option '-assembler-with-cpp'
Immagino che sia causato da qualche parametro passato dall'IDE ma non so come risolvere.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Pelletta on Sep 08, 2012, 12:47 pm
Grazie per la guida Leo, proverò su un pc fresco di installazione (kubuntu 11.04).
Ho messo su un hard disk separato anche un'installazione di kubuntu 12.04 perchè dicono vale la pena di provarlo; ho visto che nei repository c'è l'ide 1.0.1 ma proprio non riesco a conviverci... che tu sappia c'è la possibilità di installarci anche l'ide 0022 senza conflitti vari?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 08, 2012, 04:38 pm
leo, l'errore è che passi al compilatore il parametro "-assembler-with-cpp", togli quello e tutto fila liscio. Se stai usando l'ide arduino, forse trovi le opzioni al compilatore nel preferencies.txt
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 04:41 pm
@pelletta:
Personalmente non uso gli IDE dei repo ma solo quelli scaricati dal sito di Arduino. Questo perché così non devo installare nulla, non ho pacchetti da gestire, scompatto solo l'archivio nei miei Documenti e poi creo un collegamento sulla scrivania. In questo modo posso tenere le 2 versioni dell'IDE senza problemi: esse condivideranno solo il file delle preferenze.
Devi tenere a mente che la 1.0.1 non necessita della toolchain installata sul sistema perché ce l'ha integrata mentre la 0022 la vuole. Però se la installi per la 0022 poi essa viene usata anche dalla 1.0.1: se non ricordo male, la 1.0.1 usa la toolchain integrata solo se non la trova sul sistema.

Un "nota bene".
Ultimamente la 0022 non la uso quasi più, alla 1.0.1 ormai hanno convertito quasi tutte le lib.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 04:43 pm

leo, l'errore è che passi al compilatore il parametro "-assembler-with-cpp", togli quello e tutto fila liscio. Se stai usando l'ide arduino, forse trovi le opzioni al compilatore nel preferencies.txt

Che sia errato il parametro lo so, l'ho scritto anch'io  XD
Ma lo passa l'IDE, non io. E, come ho detto, non so dove si editino le opzioni (non sono nel file preferences.txt).  :smiley-sweat:
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 08, 2012, 04:56 pm
hai ragione, è hardcopdato in "./app/src/processing/app/debug/Compiler.java", riga 550;

Code: [Select]

static private List getCommandCompilerS(String avrBasePath, List includePaths,
    String sourceName, String objectName, Map<String, String> boardPreferences) {
    List baseCommandCompiler = new ArrayList(Arrays.asList(new String[] {
      avrBasePath + "avr-gcc",
      "-c", // compile, don't link
      "-g", // include debugging info (so errors include line numbers)
      "-assembler-with-cpp",
      "-mmcu=" + boardPreferences.get("build.mcu"),
      "-DF_CPU=" + boardPreferences.get("build.f_cpu"),     
      "-DARDUINO=" + Base.REVISION,
      "-DUSB_VID=" + boardPreferences.get("build.vid"),
      "-DUSB_PID=" + boardPreferences.get("build.pid"),
    }));

    for (int i = 0; i < includePaths.size(); i++) {
      baseCommandCompiler.add("-I" + (String) includePaths.get(i));
    }

    baseCommandCompiler.add(sourceName);
    baseCommandCompiler.add("-o"+ objectName);

    return baseCommandCompiler;
  }



da combiare in

Code: [Select]
static private List getCommandCompilerS(String avrBasePath, List includePaths,
    String sourceName, String objectName, Map<String, String> boardPreferences) {
    List baseCommandCompiler = new ArrayList(Arrays.asList(new String[] {
      avrBasePath + "avr-gcc",
      "-c", // compile, don't link
      "-g", // include debugging info (so errors include line numbers)
      "-mmcu=" + boardPreferences.get("build.mcu"),
      "-DF_CPU=" + boardPreferences.get("build.f_cpu"),     
      "-DARDUINO=" + Base.REVISION,
      "-DUSB_VID=" + boardPreferences.get("build.vid"),
      "-DUSB_PID=" + boardPreferences.get("build.pid"),
    }));

    for (int i = 0; i < includePaths.size(); i++) {
      baseCommandCompiler.add("-I" + (String) includePaths.get(i));
    }

    baseCommandCompiler.add(sourceName);
    baseCommandCompiler.add("-o"+ objectName);

    return baseCommandCompiler;
  }
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Sep 08, 2012, 08:43 pm
Se il comando c'è credo che serva, quindi toglierlo solo perchè da errore non mi sembra giusto.
Controllando qui (http://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html (http://gcc.gnu.org/onlinedocs/gcc/Overall-Options.html)) mi sembra però che si siano dimenticati un pezzo.

il comando giusto dovrebbe essere
Code: [Select]
"-x assembler-with-cpp",

Potete provarlo e nel caso segnalare il bug?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Sep 08, 2012, 08:44 pm
Ci sono buone probabilità che ad Atmel non interessi il C++ e tanto meno C++/asm per cui non hanno curato questo aspetto e da qui l'errore.

Io continuo a preferire la creazione dei pacchetti nativi della distrò. Per fedora scarico la versione sorgente del pacchetto .srpms la installo nel build tree modifico il file .spec introducendo le nuove patch e poi avvio il builder di pacchetti rpmbuild attendo un po e il pacchetto è pronto per l'installazione/aggiornamento. Stessa cosa accade per ubuntu ma ovviamente i pacchetti sono .deb e il builder si chiama dpkg-buildpackage
http://manpages.ubuntu.com/manpages/lucid/man1/dpkg-buildpackage.1.html (http://manpages.ubuntu.com/manpages/lucid/man1/dpkg-buildpackage.1.html)

Ovvio che il tempo necessario per ricostruire tutti i pacchetti della toolchain si allunga fino anche ad una settimana nel caso ci sia d'aggiustare qualcosa, ma ne vale la pena la maggior parte delle volte.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 08, 2012, 10:04 pm
comunque non dovrebbe dare problemi, anzi secondo me è più corretto costringere l'user a scrivewre la giusta estensione per i propri file. Si fa meno confusione.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 10:40 pm
@Mauro:
tempo fa anch'io ero uno di quelli che teneva le ultime versioni degli strumenti di compilazione ma:
1) ero costretto ad un grosso lavoro di debug perché le nuove versioni correggevano bug ma ne introducevano altri, per cui dovevi sempre editare alcuni file
2) non tutto era corretto con le patch tant'è che, ad esempio, binutils-avr 2.22 non andava manco a sparargli, dovevo tenere la versione 2.20 (famoso baco del millis non funzionante).
Insomma, alla fine se posso avere una toolchain ufficiale e funzionante, perché non usarla? Inoltre non sporco neanche il sistema spargendo file a giro dato che resta tutto all'interno dell'IDE di Arduino. Mi sembra una soluzione molto pulita.

@Paolo:
purtroppo non si tratta di un "bug" dato che riguarda una toolchain che non è distribuita con l'IDE di Arduino. Quella funziona, per cui ti potrebbero sempre dire: "perché ne stai usando un'altra? avete fatto tante storie per avere la toolchain con l'IDE ed ora rompete per usarne una diversa?"  XD

@lesto e paolo:
proverò con le modifiche a ricompilare i sorgenti di arduino
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 11:30 pm

il comando giusto dovrebbe essere
Code: [Select]
"-x assembler-with-cpp",

Potete provarlo e nel caso segnalare il bug?

Così non funziona. Adesso da:
Code: [Select]
avr-gcc: language: assembler-with-cpp not recognized


EDIT:
dopo indagini su internet, il testo da inserire è:
Code: [Select]
-Wa,-gstabs -x assembler-with-cpp
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 08, 2012, 11:53 pm
Che ...lle. Adesso si presenta il bug "attempt to use poisoned "SIG_USART0_RECV" (compilando per Mega2560) descritto qui:
http://code.google.com/p/arduino/issues/detail?id=955

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 09, 2012, 12:22 am
No, è un calvario.... dopo mezz'ora passata a patchare i file nel core per togliere i riferimenti SIG_ e SIGNAL, adesso mi ritrovo un'altra sfilza di errori....
La conclusione è che il team di Arduino stia usando una vecchia versione della toolchain e che l'IDE è talmente basato su di essa che è praticamente impossibile sperare di ottenere una compilazione senza errori se si utilizza una toolchain "uscita di fabbrica" pubblicata da Atmel senza pensare di metterci su le mani.

Ora vado a dormire, ho già perso troppo tempo.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 09, 2012, 11:03 am
Dopo averci dormito sopra, stamani mi sono accorto di aver commesso un errore nell'edit del file HardwareSerial.cpp.
Adesso ho ottenuto una toolchain che mi compila lo sketch di astrobeed senza errori. In allegato a questo post trovate un archivio contenente i file del core modificati che dovete sostituire a quelli presenti nell'IDE di Arduino ed il firmware di test compilato.
Ricordo che i file per il core:
1) valgono solo per l'IDE 1.0.1
2) valgono solo se volete usare la toolchain Atmel 3.4.1

Chiedo poi ad astrobeed di verificare che il firmware compilato funzioni perché non ho né la Mega per provare né uso i quadricotteri né tantomeno MultiWii. Allego anche il firmware compilato (77.712 byte).
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 11, 2012, 05:45 pm
Qualcuno ha provato la nuova toolchain con le modifiche che ho suggerito?

Astrobeed, hai provato il firmware compilato per vedere se è funzionante (per capire insomma se la toolchain ha compilato correttamente)?
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: astrobeed on Sep 11, 2012, 05:47 pm
Leo ho visto solo adesso la tua richiesta, vedo di fare la prova quanto prima, sono quasi sempre in giro in questi giorni e ovviamente non mi porto appresso Arduino :)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 11, 2012, 07:58 pm

Leo ho visto solo adesso la tua richiesta, vedo di fare la prova quanto prima, sono quasi sempre in giro in questi giorni e ovviamente non mi porto appresso Arduino :)

Non ti preoccupare, capisco. Era un "promemoria", il mio  ;)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 16, 2012, 11:17 pm
Ehilà.... qualcuno ha provato la toolchain 3.4.1?  :smiley-sweat:
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 16, 2012, 11:25 pm
se ti basta la "liscia" provo io, è quella di default su arch linux. http://www.archlinux.org/packages/?q=avr
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 16, 2012, 11:29 pm
Ciao lesto. No, non mi basta  :smiley-yell:
Forse non hai seguito tutto il thread ma mi riferivo alla toolchain ufficiale Atmel versione 3.4.1, non ai pacchetti singoli che si trovano nel repo di Arch. Ho descritto il procedimento che ho seguito per farla funzionare correttamente ed ora a me lavora correttamente, per lo meno con i micro che ho provato.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 17, 2012, 12:25 am
sì, ma pensavo che nel frattempo ti servisse una conferma anche sulle vanilla.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 17, 2012, 12:41 am
No, la vanilla non la uso più da tanto, non funziona. E' piena di bug e non contiene le patch ufficiali Atmel. Difatti, prima dell'arrivo della versione 1.0.1 dell'IDE usavo la toolchain già patchata presente in AUR (http://aur.archlinux.org/packages.php?O=0&K=atmel&do_Search=Go).

Con l'uscita della toolchain 3.4.1 ufficiale e patchata Atmel, ho voluto provarla. Ho penato non poco per renderla funzionante ma alla fine ci sono riuscito.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 18, 2012, 09:27 am
In attesa di riscontri (che non arrivano....  :smiley-sweat: ) vi riporto un test che ho condotto con la nuova toolchain.

IDE: Arduino 1.0.1
Sketch: ArduinoISP
Compilazione con toolchain integrata: 5438 bytes
Compilazione con toolchain 3.4.1: 4962 bytes

Caspita, 476 byte in meno di occupazione della Flash! E sketch perfettamente funzionante. Quindi la nuova toolchain ottimizza molto di più.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 18, 2012, 10:12 am
facciamo un test CPU... usa questo!
https://github.com/lestofante/arduinoSketch/blob/master/GPS_test/GPS_test.ino

se mi convinci me la installo pure io, anzi la possiamo proporre per il prossimo IDE :)
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 18, 2012, 10:43 am
Compilato per 328, dimensione firmware 8192 8912 byte. (dislessia...  :smiley-sweat: )
Lo trovi in allegato.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 18, 2012, 10:48 am
nono, il codice usa un algoritmo complesso (in realtà 3), e quindi è ottimo per valutare se ci sono state delle ottimizzazioni a livello di VELOCITA' del codice.. in pratica mi interessa sapere i tempi di esecuzione che ti dà lo sketch, per confrontarli con quelli del vvechhio compilatore.

Questo testa in realtà l'ottimizzazione delle funzioni matematiche, sarebbe da fare un test anche sull'ottimizzazione del c++, ma non ho codice pronto sotto mano
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Sep 18, 2012, 10:55 am
Risultati:
time1:224
time2:600
time3:268
Astro:
distance:179.90
distance radians:3.14
time:1300
lesto1:
468
distance:0.00
distance radians:0.00
time:1420
Lesto2:
180.00
time:956
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Sep 18, 2012, 12:39 pm
azz io ho questi valori (da una vecchia discussione)
Quote
Astro:
distanza: 468
bearing: 88.21
time:1336
lesto1:
distanza: 468
bearing:46.70
time:1348
Lesto2:
bearing: 55.69
time:928


però i valori sono sflasati, devo riorpovare
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 05, 2014, 12:24 pm
riesumiamo il topic.
atmel ora fornisce le toolchian già compilate: http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx

ora le scarico
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Feb 05, 2014, 12:32 pm
Per il procedimento puoi fare riferimento ai due topic su Windows e su Mac sempre in sezione Megatopic.
Credo che la Toolchain Mac si avvicini molto a quella Linux.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: gpb01 on Feb 05, 2014, 12:41 pm
Per Win e Per Linux ... Atmel ha sempre fornito la Toochain già compilata ... è per Mac che non la fornice mai ...  :smiley-roll:

Per il resto ... la procedura è simile in tutti e tre gli ambienti ... si tratta di sostituire una cartella recuperando un paio di cose dalla vecchia che nella Toolchain non sono comprese ... praticamente il punto 6. delle istruzioni per Win :

Quote
6 - Copiare la cartella "etc" e il programma "avrdude.exe" dall'installazione originale, si trovano rispettivamente in "..\arduino-xx\hardware\tools\avr" e ".\arduino-xx\hardware\tools\avr\bin", nelle stesse posizioni della versione modificata dell'IDE.


... volendo ... si potrebbe anche sostituire avrdude con la nuova versione 6.0.1 ;)

Guglielmo
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 05, 2014, 01:47 pm
sì, ad occhio posso confermare, stasera provo e vediamo

i link nei primi post portano a url morte
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: leo72 on Feb 05, 2014, 02:00 pm
Sì per Win/linux ci sono stati sempre i binari precompilati. Io per aggiornare seguivo questi semplici passi:
http://www.leonardomiliani.com/2012/come-aggiornare-la-toolchain-avr-alla-versione-3-4-1-linux/

Ora ho cambiato sistema e quindi non sono aggiornato sui problemi che ci potrebbero essere sull'ultima toolchain 3.4.3.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Feb 05, 2014, 04:09 pm
Il problema principale è con PROGMEM, poi c'erano altri warnings...
Io l'ho risolto definendo una variabile che abilita la modalità legacy, l'Arduino Team dovrebbe invece risolverlo riscrivendo tutto il core che tratta la PROGMEM perché i vecchi metodi, da me riesumati, sono deprecati.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 05, 2014, 04:30 pm
infatti io intendo iniziare a riscriverlo, e piano piano postare le modifiche da fare sul github del progetto.

Ancher se non mettono le nuove librerie, far fuori il codice deprecato è sempre un'ottima cosa. Sono uno che ci va giù pesante con i warning.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Feb 05, 2014, 04:35 pm
(http://2.bp.blogspot.com/_K1T7uOvIfNA/TLiU4d4ydoI/AAAAAAAACpw/ulAQvH3O7ks/s400/PuffoBrontolone.jpg)
         I HATE WARNINGS!
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 06, 2014, 11:50 pm
hello allora
procedura:
1. scaricare la toolchian AVR. Chiede la registrazione o unamail valida, io in questi casi uso 10minutemail.com, che da una mail "a scadenza" (odio dare troppo in giro la mail)
2. dezippare la toolchain AVR
3. rinominare la cartella bin in gin.gcc
4. togliere (non eliminare) il contenuto della cartella arduino/harwdare/tool TRANNE la cartella bin
5. ecco l'errore progmem, da fixare con .... ora cerco, non ricordo!

edit:
SOLUZIONE TEMPORANEA AL PUNTO 5: aggiungere lasegente define in cima al WString.h (cartella arduino-1.5.5/hardware/arduino/avr/cores/arduino/)
Code: [Select]
#define __PROG_TYPES_COMPAT__

qualcuno ha trovato la definitiva?

in oltre tetsto l'upload su UNO, funziona :)

Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 07, 2014, 12:07 am
test con: https://github.com/lestofante/arduinoSketch/blob/master/GPS_test/GPS_test.ino

1.5.5 MOD:

Code: [Select]
Sketch uses 8,524 bytes (26%) of program storage space. Maximum is 32,256 bytes.
Global variables use 355 bytes (17%) of dynamic memory, leaving 1,693 bytes for local variables. Maximum is 2,048 bytes.


Code: [Select]

Astro:
distance:179.36
distance radians:3.13
time:1292
lesto1:
468
distance:179.87
distance radians:3.14
time:1364
Lesto2:
179.98
time:940

time1:228
time2:592
time3:260


1.5.5 liscia:
Code: [Select]
Sketch uses 9,024 bytes (27%) of program storage space. Maximum is 32,256 bytes.
Global variables use 355 bytes (17%) of dynamic memory, leaving 1,693 bytes for local variables. Maximum is 2,048 bytes.


Code: [Select]

Astro:
distance:179.87
distance radians:3.14
time:1316
lesto1:
468
distance:179.94
distance radians:3.14
time:1400
Lesto2:
179.99
time:940

time1:216
time2:564
time3:296
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: PaoloP on Feb 07, 2014, 12:13 am
Quel #define è quello che ho adottato anche io su Windows.
Io ho anche sostituito AVRdude con la versione 6.0.1.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 07, 2014, 12:26 am
ma è un work around!

domani sera ho una cenetta, ne riparliamo nel week-end
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: Maurotec on Feb 07, 2014, 06:06 pm
Quote
qualcuno ha trovato la definitiva?


Mi ricordo di aver postato la soluzione, ma ora il post non so più dov'è, ma se ti serve guardo le modifiche che ho fatto e le riposto, anzi ricordo che avevo postato un .zip con le modifiche.

Fammi sapere.

Ciao.
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 07, 2014, 06:09 pm
ho letto quella di spostare PROGMEM da davanti a dietro alla dichiarazione, ma pare che quanlcuni avesse detto che non gli funzionava
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: gpb01 on Feb 07, 2014, 06:19 pm
Lesto ... QUI (http://forum.arduino.cc/index.php?topic=203097.0) trovi molte cose e molte modifiche già fatte e provate ... ;)

Guglielmo
Title: Re: [Linux] Aggiornare la toolchain Avr
Post by: lestofante on Feb 08, 2014, 04:13 am
+1 ricordavo la discussione ma non la trovavo, ero convinto fosse mescoltata quì!