Arduino / Linux · 3 November 2011 0

Arduino e Ubuntu 11.10

L’Arduino non va d’accordo con l’ultima versione 11.10 di Ubuntu e Kubuntu/Xubuntu. Esistono 2 problemi: un errore in compilazione e la generazione di codice non perfettamente funzionante.

Andiamo per gradi.

Errore in compilazione.
Con le nuove versioni di avr-gcc si ottiene un errore compilando qualunque sketch per Arduino. Esaminando l’errore viene segnalato un problema con la libreria math.h Questo errore deriva dal fatto che nella libreria in oggetto è stata definita la funzione round che però è anche definita nel core di Arduino. Ovviamente le 2 definizioni vanno in conflitto. Per ovviare a questo problema basta editare il file /hardware/arduino/cores/wiring.h e commentare la riga n° 79 che deve diventare così:

//#define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
Il secondo problema è molto più subdolo e si manifesta solo in rarissime occasioni. Si tratta di un problema forse legato al compilatore che non genera codice perfettamente funzionante. Al momento ho riscontrato questo problema solo nell’uso dello sketch ArduinoISP che, come saprete, serve per poter utilizzare una scheda Arduino come un programmatore ISP per chip esterni.
Cercando di fare l’upload di uno sketch su un microcontrollore in standalone tramite l’Arduino con lo sketch ArduinoISP, se lo sketch ArduinoISP è compilato su Ubuntu 11.10 l’IDE riporterà che avrdude segnala un errore di sincronizzazione del programmatore. Lo stesso sketch compilato su Ubuntu 11.04 funziona invece perfettamente e l’Arduino può essere utilizzato come programmatore ISP anche sotto Ubuntu 11.10. Stessa cosa anche con una Luigino328, quindi non si tratta di un problema HW della mia UNO ma di un problema software legato al compilatore.

Ancora non ho capito se dipende dal nuovo kernel 3.0 (lo stesso identico problema l’ho riscontrato infatti anche su Arch Linux) oppure da qualche file del compilatore con un nuovo bug, fatto sta che allo stato attuale consiglio di NON aggiornare ad Ubuntu 11.10 se utilizzate l’Arduino come ISP.