Cacchio ho sbagliato a scrivere, però penso che si capisse il senso no.
PGM_P p = (PGM_P)ifsh;
Quando si usa F o PSTR accadono due cose fondamentali:
Si dice al compilatore di trattare una string literal in modo particolare, cioè scrivimela nella flash questa string.
Inoltre si dice di ritornare un puntatore in flash (16bit) che punta al primo indirizzo in cui hai conservato la literal string e di castarlo ad un puntatore commestibile. Ora a rigor di logica PGM_P o const char * sono la stessa cosa e possono conservare benissimo un puntatore ad un indirizzo in flash, da notare che il puntatore in flash diventa tale quando lo usiamo come le funzioni pgm_ecc e gli possiamo far puntare qualunque indirizzo a 16bit anche in ram, tra l'altro "p" risiede in ram, ma il contenuto è un indirizzo della flash.
I passaggi che ho fatto ad alta voce sono appunto dei passaggi frutto di ragionamento logico, e non sono la soluzione.
Il codice originale funziona anche se il compilatore emette dei warning, questo è sicuro perché il problema è nel cast in questione che ora sembra risolto stando al post di leo, dove mi sembra che sia sparito il warning.
Il fatto che il compilatore ignori PROGMEM è cosa buona e giusta perché PROGMEM viene usato solo per dire al compilatore: L'oggetto che ha l'attributo PROGMEM devi metterlo in flash. Mentre const char * è la dichirazione del tipo con il qualificatore const. Capite non ha senso castare a const PROGMEM char* perché manca l'oggetto a cui applicare l'attributo PROGMEM, cioè l'oggetto string literal, questa va comunque in flash grazie a F che ho mostrato in cosa si espande ed è comprensibile che PROGMEM si riferisce a string literal.
Quindi si possono lasciare le cose come stanno oppure per correttezza modificare il cast, perché ad essere ignorato è solo il secondo attributo inutile nel cast. Sono cosciente che in passato avevo detto che se ignora PROGMEM allora la string literal non va in flash, e mi sbagliavo evidentemente. Probabilmente mi sono confuso e per qualche motivo ho dimenticato PSTR o F che già contengono PROGMEM e questo non viene ignorato.
@gpb01
Tu avevi provato uno sketch che non compilava, ora non ricordo il programma ma aveva a che fare con il wifi, ecco quello è un errore più rognoso che non saprei proprio risolvere. Però mi pare di aver capito che l'errore è scomparso con la 3.4.3, o no?
astrobeed:
Certo che ti da tutte quelle warning, è normale, togli la F e vedrai che spariscono tutte, immagino che non devo spiegarti il motivo
Ovvio Astro ... la mia sorpresa era dovuta al fatto che gli stessi warning li produce anche la toolchain originale inserita nell'IDE e da qui la mia sorpresa/domanda : "che ce stamo a sbatte a fa' se pure quella loro ce fa' la stessa cosa ???"
MauroTec: @gpb01
Tu avevi provato uno sketch che non compilava, ora non ricordo il programma ma aveva a che fare con il wifi, ecco quello è un errore più rognoso che non saprei proprio risolvere. Però mi pare di aver capito che l'errore è scomparso con la 3.4.3, o no?
Si, con la 3.4.3 almeno arriva fino in fondo ... ho preso l'esempio della libreria WiFi "WiFi web Client" ed ecco il risultato (allegato come file di testo).
Mi sembrano tutti warning ... diciamo "trascurabili"
leo72:
Ottengo gli stessi risultati. Quindi possiamo dire che il problema sia stato risolto grazie a Mauro
Si, anche se ... sembra NON fosse un problema ...
... visto che, come è dimostrato, gli stessi warning sulla Print.cpp esistono nell'IDE con la toolchain ufficiale e che quindi ... avendolo capito prima ... ci saremmo evitati tutto lo sbattimento XD XD
Anzi, direi che per semplificare la vita agli utenti, nelle "istruzioni per installare la nuova toolchain" non parleremo proprio della modifica di Print.cpp ... ma solo di cosa sostituire e dove
Ciao a tutti e Buon Anno!!!...Volevo comunicare che grazie all'instancabile lavoro di Guglielmo(che ringrazio) sono riuscito a compilare lo sketch del mio sistema demotico basato su Arduino Mega passando da 63877 bytes a 60994 bytes grazie al nuovo compilatore!!!...lo sketch gira senza problemi,i soliti warming trascurabili in fase di compilazione ma per il resto tutto OK!!....
... suggerisciglielo ... e ... visto mai che ... si accorgono anche di questo thread dove la metà dei problemi li avevamo già affrontati e risolti ] ] ]
PaoloP:
Non sarebbe il caso di spostare questo topic in Megatopic dove ci sono gli altri due per gli aggiornamenti su Linux e Windows?
Il topic di Linux è questo --> [Linux] Aggiornare la toolchain Avr - Megatopic - Arduino Forum @Leo
Potresti rieditare il primo post creando una sorta di guida all'aggiornamento come è stato fatto da Michele e Guglielmo.
Perchè altrimenti uno dovrebbe leggere tutti i post.
grazie paolo, è esattamente quell che cercavo.
utilimamente sono abbastanza attivo, volevo codare un pò per la comunità, in particolare pulire i warning dalle librerie ufficiali