[Linux] Aggiornare la toolchain Avr

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.

@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

PaoloP:
il comando giusto dovrebbe essere

"-x assembler-with-cpp",

Potete provarlo e nel caso segnalare il bug?

Così non funziona. Adesso da:

avr-gcc: language: assembler-with-cpp not recognized

EDIT:
dopo indagini su internet, il testo da inserire è:

-Wa,-gstabs -x assembler-with-cpp

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

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.

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

arduino.tar.gz (40.9 KB)

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

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

astrobeed:
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 :slight_smile:

Non ti preoccupare, capisco. Era un "promemoria", il mio :wink:

Ehilà.... qualcuno ha provato la toolchain 3.4.1? :sweat_smile:

se ti basta la "liscia" provo io, è quella di default su arch linux. Arch Linux - Package Search

Ciao lesto. No, non mi basta :stuck_out_tongue_closed_eyes:
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.

sì, ma pensavo che nel frattempo ti servisse una conferma anche sulle vanilla.

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.

In attesa di riscontri (che non arrivano.... :sweat_smile: ) 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ù.

facciamo un test CPU... usa questo!

se mi convinci me la installo pure io, anzi la possiamo proporre per il prossimo IDE :slight_smile:

Compilato per 328, dimensione firmware 8192 8912 byte. (dislessia... :sweat_smile: )
Lo trovi in allegato.

sketch_sep18c.cpp.hex (24.5 KB)

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

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

azz io ho questi valori (da una vecchia discussione)

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