[WIN] Aggiornam. compilatore IDE 0022-0023-1.0 all'ULTIMA VERSIONE ATMEL

Mi sono messo a spulciare nella IssueList dell'Arduino. Ecco l'issue #860:

Reported by project member wes...@gmail.com, Mar 15, 2012

The ArduinoISP sketch, widely used for burning bootloaders into AVRs, does not work when compiled using the 1.0 IDE. Failures occur during the attempts to "Program Page", when a largish block of data is sent at once.

This was suspected of being due to the new structure of the HWSerial library (receive buffer size decreased from 128 to 64), and was eventually tracked (thanks to Brian Cook) to the the heartbeat function used to pulse an LED during the idle loop. This does a delay(40), which means that even though it only happens when the sketch is "idle" or in between commands, a badly timed command exceeding 80bytes (at 19200bps) can overflow the buffer before processing starts.

The attached patch implements a replacement for delay that immediately aborts if serial traffic is detected. It also changes readbytes() to wait for the number of bytes requested, instead of assuming that they are already buffered at interrupt level.

Traduco:

Segnalato da membro del progetto wes...@gmail.com, Mar 15, 2012 (wes... a me pare che si stia parlando di Westgm, l'autore dell'Optifix)

Lo sketch ArduinoISP, usato diffusamento per caricare i bootloader negli AVR, non funziona quando viene compilato usando l'IDE 1.0. Fallisce durante il tentativo "Program Page", quando un grosso blocco di dati è spedito in un'unica volta.

Parrebbe che la cosa derivi dalla nuova struttura della libreria HWSerial (la dimensione del buffer di ricezione è stata ridotta da 128 a 64), ed è stata rilevata in un secondo tempo (grazie a Brian Cook) dalla funzione heartbeat usata per far lampeggiare un LED durante il ciclo di attesa. Questa funzione esegue un delay(40), il che significa che anche se ciò succede quando lo sketch è "inattivo" o nel mezzo di 2 comandi, un comando mal temporizzato eccedente 80 byte (a 19200 bps) può mandare in overflow il buffer prima che il processo inizi.

La patch allegata inserisce un sostituto per il delay che lo fa fermare immediatamente in presenza di traffico seriale. Cambia anche readbytes() per attendere il numero di byte richiesti invece di assumere che sono già stati bufferizzati a livello di interrupt.

Nel link trovate infatti allegata una patch. Sarebbe da provare (chi ne ha modo, io non posso al momento).

EDIT:
aggiungo: Type DEFECT - Status ACCEPTED - Priority HIGH

leo72:
Il 16 aprile Max ha promesso l'IDE nuova, e con essa ci sarà lo sketch ArduinoISP nuovo. Vedremo.

Speriamo sia compatibile anche con la 0022 :sweat_smile:

Trisonic:
grazie astro e michele per la guida...
...giusto per sapere, quali sono i benefici di questa mod? scrivetelo nel primo post! grazie :wink:

ci stiamo lavorando, abbi un po' di pazienza, intanto dai un'occhiata al Topic, come ho fatto io stasera, ME LO SONO RILETTO TUTTO, DISCUSSIONI SUI S.O. COMPRESE, in fondo sono solo 283 post :stuck_out_tongue_closed_eyes:, però visto a rileggere come escono le magagne? :wink:
@ Leo: ovvio lì si riferisce tutto all'1.0, altrimenti la farei io la prova, ma lì non c'è il file da scaricare ma un html, contenende le righe variate, se ho capito bene.

E' una patch, ossia è un file che contiene delle direttive per un programma che si chiama... "patch" (che fantasia, eh) che toglie al file segnato in alto le righe che iniziano con i segni "-" ed aggiunge quelle che iniziano con i segni "+" a partire dalle righe specificate. Non so su Windows se c'è negli strumenti di sistema un tool come patch, in Linux c'è per cui a me basterebbe dare in pasto quel file al suddetto. Altrimenti ti metti con pazienza a fare le modifiche allo sketch, si tratta di trovare la funzione heartbeat e di cambiarla aggiungendo la variabile e modificando il ciclo di attesa,.

ma la versione funzionante di ArduinoISP presente nella mia guida vi funziona ?
quando esce la 1.01 ufficiale faro' un confronto sulla velocita'. Se la "mia" e' piu' veloce continuo ad usarla, altrimenti si passa all'ufficiale ed aggiorno la guida

leo72:

[quote author=Michele Menniti link=topic=96976.msg740040#msg740040 date=1332882388]
@ Leo: ovvio lì si riferisce tutto all'1.0, altrimenti la farei io la prova, ma lì non c'è il file da scaricare ma un html, contenende le righe variate, se ho capito bene.

E' una patch, ossia è un file che contiene delle direttive per un programma che si chiama... "patch" (che fantasia, eh) che toglie al file segnato in alto le righe che iniziano con i segni "-" ed aggiunge quelle che iniziano con i segni "+" a partire dalle righe specificate. Non so su Windows se c'è negli strumenti di sistema un tool come patch, in Linux c'è per cui a me basterebbe dare in pasto quel file al suddetto. Altrimenti ti metti con pazienza a fare le modifiche allo sketch, si tratta di trovare la funzione heartbeat e di cambiarla aggiungendo la variabile e modificando il ciclo di attesa,.
[/quote]
:fearful: e dire che pensavo mi amassi come un fratello, non ti tengo più compagnia fino alle 2, me ne vado a nanna, sono in piedi da stamattina alle 6, notte :slight_smile: :sleeping:

@Mike:
sono a lavoro, ed oltretutto su una postazione Windows, per cui soffro doppiamente nel non poterti aiutare e nel non avere gli strumenti per farlo =(

@Mike:
Lo "patchato" a mano, non so se l'ho fatto bene. Provalo.

ArduinoISP.ino (10.3 KB)

smiley-eek-blue e dire che pensavo mi amassi come un fratello

@Mike:
Lo "patchato" a mano, non so se l'ho fatto bene. Provalo.

eh questo è vero amore. :open_mouth:

Notevole non tutti hanno il plugin diff nel cervello. :stuck_out_tongue: please da dove lo scarico :smiley:

Ciao.

MauroTec:
Notevole non tutti hanno il plugin diff nel cervello. :stuck_out_tongue: please da dove lo scarico :smiley:

Ciao.

E' allegato al post :wink:

leo72:

MauroTec:
Notevole non tutti hanno il plugin diff nel cervello. :stuck_out_tongue: please da dove lo scarico :smiley:

Ciao.

E' allegato al post :wink:

Grazie Leo, naturalmente scherzavo, come avrai capito ero solo morto di sonno, probabilmente ora starai dormendo tu, se hai lavorato fino alle 2 :sleeping:
Penso stasera di fare la prova con la 0022, non si sa mai :smiley:

@ tutti: mi serve sapere la versione del compilatore in dotazione all'IDE 1.0, basta cercare il file avr-gcc-4.x.y e dirmi come si chiama esattamente; secondo le mie "deduzioni" dovrebbe essere 4.3.3 o 4.3.4, ma mi serve il dato certo, grazie.

ma perchè questi:

  int flashpoll;
  int eeprompoll;
  int pagesize;
  int eepromsize;
  int flashsize;

sono dichiarati come int? quando mai avranno bisogno del segno? e poi perchè usare variabili piccole e poi fare i collages? (come per flashsize ecc..)
non sarebbe meglio se già dall'inizio fossero:

uint16_t eeprompoll;
  uint16_t pagesize;
  uint16_t eepromsize;
  uint32_t flashsize;

se ho scritto cagxxe menatemi pure :slight_smile:

Ho detto e ridetto che il compilatore allegato alla 1.0, e anche alla 1.0.1 RC, e con questa vale pure per Linux, è la vecchia 4.3.2.
Per quanto riguarda la questione sketch isp quello allegato alla 1.0.1 è diverso dagli altri, e non solo nella velocità, quindi prova ad usare quello rinominandolo .pde, ho provato a compilarlo con la 0023 e non da errori, per non obbligarti a scaricare la 1.0.1 te lo allego pronto all'uso.

ArduinoISP_1.0.1.rar (3.82 KB)

BrainBooster:
se ho scritto cagxxe menatemi pure :slight_smile:

No, hai fatto una osservazione corretta.

Grazie Astro, scusami ma io davvero ieri mi sono riletto oltre 280 post, prendendo un sacco di appunti, ovvio che ho "saltato" qualche informazione, che invece ora mi torna utile. Grazie per la trasformazione del file, in effetti ieri non vedevo errori di compilazione, semplicemente dopo averlo caricato ArduinoISP non faceva il suo lavoro, però qui avevo proprio il dubbio che non si compilasse affatto, quindi la tua prova mi dà speranze; se funziona abbiamo fatto un gran passo avanti, come soluzione proponibile.
Continuo a prendere appunti, poi al lavoro! Stasera al rientro le prove decisive XD

@ BB: non ho capito niente, data la mia ignoranza in materia, ma ti faccio i miei apprezzamenti per l'intervento :grin:

astrobeed:
Ho detto e ridetto che il compilatore allegato alla 1.0, e anche alla 1.0.1 RC, e con questa vale pure per Linux, è la vecchia 4.3.2.

Da notare che lo sketch isp, prima della patch ufficiale non funzionava nemmeno con la 1.0, e dato che il compilatore è lo stesso della 0022-0023 questo toglie ogni dubbio sul fatto che la colpa sia del compilatore.
Sicuramente il fatto che nella 1.0 il buffer della seriale è stato ridotto a 64 byte invece di 128 byte ha il suo peso, però mi piacerebbe tanto sapere perché chi ha scritto quello sketch lo ha fatto in wiring invece che in C Ansi gestendo in modo autonomo la seriale invece di affidarsi alle classi di Arduino, e non è l'unica "cavolata" presente in quel software.

astrobeed:

astrobeed:
Ho detto e ridetto che il compilatore allegato alla 1.0, e anche alla 1.0.1 RC, e con questa vale pure per Linux, è la vecchia 4.3.2.

Da notare che lo sketch isp, prima della patch ufficiale non funzionava nemmeno con la 1.0, e dato che il compilatore è lo stesso della 0022-0023 questo toglie ogni dubbio sul fatto che la colpa sia del compilatore.
Sicuramente il fatto che nella 1.0 il buffer della seriale è stato ridotto a 64 byte invece di 128 byte ha il suo peso, però mi piacerebbe tanto sapere perché chi ha scritto quello sketch lo ha fatto in wiring invece che in C Ansi gestendo in modo autonomo la seriale invece di affidarsi alle classi di Arduino, e non è l'unica "cavolata" presente in quel software.

questo è verissimo, ed il fatto che il compilatore sia identico per 0022/23 e 1.0 non lascia dubbi circa il fatto che sia colpa dello sketch; a questo punto forse basterebbe fare il passaggio opposto: cioè rinominare ArduinoISP.pde (quello della 0022) in .ino, non vorrei dire cavolate ma forse è proprio quello che ha fatto a suo tempo Testato, dovrei leggere la sua Guida, ma ora non ho tempo, ce lo dirà lui direttamente, come passa da qui :wink:

A parte il fatto che non serve rinominare da .pde a .ino perché la 1.0 apre anche i .pde, comunque lo sketch isp contenuto nella 1.0 è lo stesso della 0022-0023.

astrobeed:

[quote author=Michele Menniti link=topic=96976.msg740327#msg740327 date=1332914209]
a questo punto forse basterebbe fare il passaggio opposto: cioè rinominare ArduinoISP.pde (quello della 0022) in .ino,

A parte il fatto che non serve rinominare da .pde a .ino perché la 1.0 apre anche i .pde, comunque lo sketch isp contenuto nella 1.0 è lo stesso della 0022-0023.

[/quote]
Ah :~
quindi le famose xx righe in più a cui ti riferivi ieri riguardano la nuova versione che ora dovrebbe funzionare. Ho i neuroni saturi, finché non finisco questa tremenda sessione d'esami riesco solo a fare figure da deficiente :blush:

Si, ed la versione fornita la 1.0.1 rc1 che ti ho allegato qualche post più sopra.

astrobeed:
Ho detto e ridetto che il compilatore allegato alla 1.0, e anche alla 1.0.1 RC, e con questa vale pure per Linux, è la vecchia 4.3.2.

Astro, quel che dici non è del tutto corretto relativamente a Linux. Con Linux fino alla versione 1.0 compresa non c'è nessuna toolchain allegata all'IDE, quindi il compilatore gcc e tutta la toolchain è quella presente nel sistema. :stuck_out_tongue:
Solo con l'IDE 1.0.1 hanno allegato la toolchain, che è poi quella vecchia che già era fornita nelle versioni Windows.

Diciamo che sulla distribuzione più diffusa, Ubuntu, fino alla 11.04 avr-gcc era alla versione 4.3.5, dalla 11.10 mi pare sia la 4.5.x. Però non è funzionante al 100%, scazza proprio la compilazione dell'ArduinoISP.