Ieri ho voluto rimettere Arch Linux sul mio portatile.
Poi mi sono messo alla ricerca della versione patchata di binutils-avr che, come saprete, in Arch Linux è buggato e non permette di compilare correttamente gli sketch che usano le funzioni temporali, tipo delay() e millis().
Dopo un po' di ricerca, ho trovato un PKGBUILD per una versione non recente di binutils-avr. L'ho leggermente modificato per poter usare una versione recente della libreria (2.20.1-2). Lo trovate in allegato. Compilate il pacchetto con makepkg, poi rimuovete binutils-avr dei repo e mettete il pacchetto creato.
Ricordo che per togliere la versione precedente usate "sudo pacman -Rdd binutils-avr" (-Rdd forza la disinstallazione: è necessario far così perché gcc-avr dipende da binutils-avr) e poi potete installare uno dei pacchetti precedentemente scaricati o compilati con "sudo pacman -Udf nomepacchetto-architettura.pkg.tar.xz" (completate con il nome corretto del pacchetto).
Fatto ciò, potete compilare i vostri sketch.
PS:
non occorre più installare anche gcc-avr-svn perché l'ultima versione (4.6.1) del compilatore non ha più i bug di cui erano afflitte le versioni 4.5.x e 4.6.0
PPS:
ho provato sia lo sketch Blink che lo sketch BlinkWithoutDelay ed entrambi funzionano bene. Se trovo qualche bug o aggiornamento lo segnalo qui.
errore "missing dependencies"
Ho trovato il modo per evitare che, dopo la "forzatura" di binutils-avr 2.20.1, ogni volta che aggiornate pacman segnali che c'è una dipendenza mancante, ossia che gcc-avr 4.6.1 vuole binutils-2.21
Per far ciò basta ricompilare gcc-avr dai sorgenti modificando il suo PKGBUILD.
Date sudo pacman -Sb gcc-avr
L'opzione "b" istruisce pacman a ricompilare il pacchetto dai sorgenti. Scaricato il PKGBUILD, editatelo (vi verrà chiesto se farlo) e poi cambiate le dipendenze impostando come versione minima di binutils-avr la 2.20.1 al posto della 2.21
Fatto ciò, avviate la compilazione e, dopo 5/10 minuti (dipende dal vostro computer), avrete gcc-avr ricompilato e pronto per l'installazione.
evitare l'aggiornamento di binutils-avr
Ora si pone un nuovo problema: ogni volta che sincronizzerete i pacchetti del vostro sistema, pacman vi dirà che esiste una nuova versione di binutils-avr e vi chiederà se la volete installare. Ovviamente la risposta è NO dato che altrimenti sovrascrivereste il pacchetto corretto. Per evitare però che pacman lo chieda tutte le volte, basta mettere il pacchetto nell'ignore list editando il file di configurazione di pacman.
Da terminale date:
sudo nano /etc/pacman.conf
e poi editate la linea
#IgnorePkg =
cambiandola in
IgnorePkg = binutils-avr
Salvate e date un pacman -Syu: non dovreste avere più nessun messaggio di errore o di richiesta di aggiornamento di binutils-avr
PS:
ho notato che con gcc-avr 4.6.1 c'è ancora il problema del progmem, che dà errori di compilazione nei file pins_arduino.cpp e Tone.cpp. Ho letto sul bug tracer di avr che questo problema è stato risolto nella versione 4.6.2/4.7 ma non so quando la metteranno fuori.
Cmq, oggi volevo mettere arch sul fisso, alla fine ho tenuto Xubuntu: troppe problematiche per mettere a posto tutti i core per il bug di cui sopra (tra cui il core Tiny ed il core Sanguino per il 644).
Scaricare il pacchetto gcc-avr 4.6.0 dai link presenti in questo post
cliccare sull'archivio in modo che il vostro DE lo apra con il gestore predefinito degli archivi. Modificate poi il file .PKGINFO mettendo come dipendenza binutils-avr>=2.20. In questo modo, quando andrete ad installare gcc-avr 4.6.0, non vi romperà a causa del binutils-avr patchato
fate aggiornare l'archivio, in modo che inserisca il file modificato
adesso compilate binutils-avr con il PKGBUILD che ho messo nel primo post di questo thread, ed installatelo
ora installate il pacchetto di gcc-avr 4.6.0
resta l'ultima cosa: mettete entrambi i pacchetti nella ignorelist di pacman, aprendo /etc/pacman.conf ed inserendoli nella riga che inizia con "IgnorePkg = ". Dopo dovrà essere "IgnorePkg = gcc-avr binutils-avr". Se IgnorePkg è vuoto, avrà il carattere di commento ad inizio riga ("#IgnorePkg ="): toglietelo, altrimenti le modifiche non avranno effetto.
Fatto. Ora non ci resta che esca gcc-avr 4.6.2/4.7 e binutils-avr aggiornato... chissà quando... nel frattempo i vostri sketch si compileranno perfettamente e senza problemi.