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

Se è come su Linux, c'è da editare il filw Wiring.h del core Tiny e non del core principale di Arduino. Però se non cambi core Tiny, quella modifica resta per cui io passando dalla 3.4.1 alla 3.4.2 non ho dovuto aggiornare nulla.
Ripeto, se è come su Linux.

Confermo, ho aggiornato in Windows la 1.04, tutto funziona :smiley:

La patch serviva per rendere la toolchain compatibile con Arduino, non so se con l'ultima toolchain serve ancora, a quanto pare no, dovrei provarla per verificare eventuali problemi però in questo periodo sono straimpicciato e non ho tempo per farlo.

Ok, seguita alla lettera la guida sotto Windows ... ci sono dei problemi ...

  1. mi sembra che la sostituzione della "include" sia ancora necessaria. Non facendola non mi riconosce il tipo "prog_uint16_t"

  2. Comunque mi tira fuori degli errori che la 1.0.4 NON modificata non mi da ... in allegato l'output "verbose" della compilazione ...

A naso ... direi che c'è qualche problema con la progmem ... :frowning:

Qualcuno sa da cosa può derivare ? Grazie,

Guglielmo

Compilazioni.txt (47.1 KB)

bhe, dice che "__c" deve essere const... cerca da dove arriva questa variabile e aggiungici const davanti. dovrebbe bastare...

lesto:
bhe, dice che "__c" deve essere const... cerca da dove arriva questa variabile e aggiungici const davanti. dovrebbe bastare...

Si, certo, il punto è che con l'IDE originale compila fino alla fine senza problemi (con dei warning) ... mentre con la nuova ToolChain da errore ... vorrei capire il perché ... non risolvere semplicemente modificando il sorgente :wink:

Guglielmo

il punto è che fino ad ora il compilatore accettava variabili non const da mettere nella progmem.
Però dato che la progmem è modificabile sono in fase di flash, questo è un errore; dunque ora le variabili devono essere const, in modo da obbligarti a fare attenzione a questa cosa.

probabilmente __C è una variabile di comodo in cui viene piazzata la stringa da "progmemmare", quindi va cambiata anch'essa (che però essendo const... c'è da rivedere il codice)

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=871000

Lesto ...
... preso questo codice :

#include <avr/pgmspace.h>

void setup() {
 
 Serial.println(F("TEST")); 

}

void loop() {

}

... mi da già errore :

C:\arduino-1.0.4-new\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\arduino-1.0.4-new\hardware\arduino\cores\arduino -IC:\arduino-1.0.4-new\hardware\arduino\variants\standard C:\Users\gpb01\AppData\Local\Temp\build7822850351586823830.tmp\sketch_may08a.cpp -o C:\Users\gpb01\AppData\Local\Temp\build7822850351586823830.tmp\sketch_may08a.cpp.o 
sketch_may08a.ino: In function 'void setup()':
sketch_may08a.ino:5:17: error: variable '__c' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

... quindi ... il problema sembra essere nella pgmspace e non nel mio codice. Oppure ... ho sbagliato io qualche cosa nel sostituire la ToolChain, ma ho rifatto tutti i passaggi svariate volte ed ottengo sempre lo stesso risultato ... :frowning:

Guglielmo

Edit : la macro F è definita : #define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal))) ... quindi cosa altro deve essere "const" ?

Guglielmo, scusa ma mi sono perso...., hai seguito alla lettera tutte le istruzioni del primo post, compresa l'installazione della patch di Astro, ed ottieni l'errore che hai detto, OPPURE hai fatto tutto senza la patch?

ok, a naso direi che ora la TUA variabile è const (quindi corretto) va vene puntata da __c che NON è const... ora il punto è capire da dove arriva questa --c, io mi apsetto arrivi dalle librerie arduino.

Ho dovuto installare la patch perché se non la installi ... da errori anche su banalità del tipo : "prog_uint16_t".

Quindi, con la patch installata, mi da problemi con la macro F() :frowning:

Guglielmo

lesto:
ok, a naso direi che ora la TUA variabile è const (quindi corretto) va vene puntata da __c che NON è const... ora il punto è capire da dove arriva questa --c, io mi apsetto arrivi dalle librerie arduino.

Occhio, non e la MIA variabile, la definizione della macro F() è quella STANDARD che trovi nella Wstring.h standard di Arduino !!!

Ma a voi non da problemi con la pgmspace ?

Guglielmo

gpb01:
Quindi, con la patch installata, mi da problemi con la macro F() :frowning:

Se non erro la F() è stata introdotta dopo l'IDE 1.0, fino a quella release era tutto ok, ovviamente devo provare in prima persona e verificare cosa tocca aggiungere/patchare per rendere il tutto compatibile con l'attuale versione dell'IDE.
Il problema è che adesso, e almeno per altri 15 giorni, non ho il tempo per farlo, sono strastrastrastraimpicciato con il lavoro :slight_smile:

astrobeed:
...
Il problema è che adesso, e almeno per altri 15 giorni, non ho il tempo per farlo, sono strastrastrastraimpicciato con il lavoro :slight_smile:

Nessun problema Astro, ci mancherebbe, anzi, sempre GRAZIE :slight_smile:

Se invece qualcun'altro provasse il piccolo programmino che ho messo e mi confermasse l'errore ... sarei più tranquillo ... di aver fatto il tutto correttamente :grin: Grazie ...

Guglielmo

Un passo avanti ...
... la pgmspace.h che sta nella toolchain è diversa da quella che è di base nell'IDE e da quella della patch di Astro.

Hanno deprecato una infinità di definizioni e modificato varie cose all'interno :frowning:

Provando a mettere quella nuova al posto di quella vecchia ... il piccolo programmino di test si compila ... anche se con dei warning piuttosto sospetti (... ho idea che in realtà non metta il testo in progmem), ma programmi più complessi danno errori nelle definizioni di variabili che usano tipi come "prog_uint16_t" ... che sono stati, appunto, deprecati :frowning:

Un bel casino insomma ...

Guglielmo

Edit : L'allegato pdf mostra le differenze estratte con "DeltaWalker" ...

differenze.rar (103 KB)

gpb01:
Un bel casino insomma ...

Già...
Pensa che molti sono stati presi dal panico a seguito del cambiamento dall'IDE 0.22 alla nuove versioni 1.x per aver rinominato e modificato il file WCostant.h in Arduino.h.
Immagina quando, cambiando toolchain, gli venissero errori che tu chiami banalità. :grin: pgmspace? Che è? Si mangia?? :roll_eyes:

Comunque le mie conoscenze sono troppo limitate per aiutarvi in un discorso di questo genere.
Credo che per le correzioni bisognerà aspettare che tra 15/20 gg Astro si liberi. 8)

C:\arduino-1.0.4\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=104 -IC:\arduino-1.0.4\hardware\arduino\cores\arduino -IC:\arduino-1.0.4\hardware\arduino\variants\standard C:\arduino-1.0.4\hardware\arduino\cores\arduino\Print.cpp -o C:\Users\gpb01\AppData\Local\Temp\build3177612874521486560.tmp\Print.cpp.o
C:\arduino-1.0.4\hardware\arduino\cores\arduino\Print.cpp: In member function 'size_t Print::print(const __FlashStringHelper*)':
C:\arduino-1.0.4\hardware\arduino\cores\arduino\Print.cpp:44: warning: 'progmem' attribute ignored

@gpb01
Ti faccio notare l'ultima riga dove dice che alla riga 44 di Print.cpp progmem è stato ignorato.
Si tratta del risultato della compilazione che hai chiamato "CON L'IDE ORIGINALE"

Ciao.

MauroTec:
@gpb01
Ti faccio notare l'ultima riga dove dice che alla riga 44 di Print.cpp progmem è stato ignorato.
Si tratta del risultato della compilazione che hai chiamato "CON L'IDE ORIGINALE"
...

Ok, un warning (... e su codice standard Arduino, la Print.cpp) e non una raffica di errori bloccanti.

Ripeto, provate a compilare un qualche cosa che faccia uso della pgmspace.h e vedrete (bastano le quattro righe che ho messo qualche post fa) ... ]:smiley:

Guglielmo

se c'è un warning vuiol dire chequalcosa non viene fatto per bene, ma c'è una forzatura. Quindi nulla di strano che un aggiornamento del compilatore rompa definitivamente la compatibilità

comunquenel link che ho postato trovi la spiegazione e soluzione, anche se sinceramente io ci ho capito poco, non sapendoche combina arduino.

Ecco appunto, il warning può essere cosa di poco conto, ma nel caso specifico avere ignorato un attributo che marca ciò che dovrà andare nella flash non è di poco conto, ancora di più se ciò accade in quello che si crede funzionare correttamente.

Per questo ho postato, perchè forse come dice lesto qualcosa non viene fatto bene, per di più viene da ciò che si pensa funzionare.

Per il resto io sono fuori da ogni test, continuerò ad usare la vecchia versione Atmel con gcc-4.5.1 che non ha mai dato problemi e anche perchè non c'è modo di compilare con le patch di atmel 3.4.2. Cioè le patch devono essere patchate, già accaduto con la 4.5.1, ma in tal caso le mie competenze mi hanno permesso di sistemare le cose, mentre con la 3.4.2 mi sono perso e al massimo sono riuscito a compilare binutils senza errori, poi avr-gcc mi ha fatto perdere la pasienza e ho mollato.

Ciao.