Go Down

Topic: [WIN] Aggiornam. compilatore IDE 0022-0023-1.0 all'ULTIMA VERSIONE ATMEL (Read 174261 times) previous topic - next topic

nid69ita

Ma se quello che scrive @MauoTec nel topic per [mac]  è la soluzione ovvero
Code: [Select]
const char PROGMEM *p => const PROGMEM char  *p
l'inversione del qualificatore (tra le altre cose),
diventa impossibile da fare, perchè oltre al core bisognerebbe anche modificare librerie di terze parti, no !?!
my name is IGOR, not AIGOR

lestofante

Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

gpb01


Ma se quello che scrive @MauoTec nel topic per [mac]  è la soluzione ovvero
Code: [Select]
const char PROGMEM *p => const PROGMEM char  *p
l'inversione del qualificatore (tra le altre cose),
diventa impossibile da fare, perchè oltre al core bisognerebbe anche modificare librerie di terze parti, no !?!


Purtroppo NON è quella la soluzione ... prova e vedrai che continua a non andare bene ...

Code: [Select]

/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL 3.4.3.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.cpp: In member function 'size_t Print::print(const __FlashStringHelper*)':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL 3.4.3.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.cpp:44:23: warning: '__progmem__' attribute ignored [-Wattributes]
   const PROGMEM char *p = (const char PROGMEM *)ifsh;
                       ^


Guglielmo
Search is Your friend ... or I am Your enemy !

menniti


Confermo che le ultime release della toolchain Atmel non sono più utilizzabili con Arduino a meno di non mettersi a fare molte modifiche sia nella toolchain che nel core.


riesci a dirmi qual è l'ultima versione utilizzabile? Così aggiorno il primo post e metto un avviso in tal senso; anch'io avevo tentato di ripetere l'operazione con l'ultima TC ma mi ero già perso a livello di percorsi e cartelle  :~
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

gpb01

Aspetta Michele ... questa nuova 3.4.3 ... sembra aver risolto parecchi problemi delle precedenti ... facci finire di fare le prove (se vuoi seguirle, le stiamo facendo nel thread della Toolchain per Mac, ma tanto abbiamo dimostrato che è la stessa cosa) così poi hai una situazione aggiornata ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

menniti

OK Guglielmo, il problema sarà però mettere a punto la procedura per Windows, grazie.
Manuale "Arduino e le tecniche di programmazione dei microcontrollori ATMEL"
http://www.michelemenniti.it/manuale_di_programmazione.html
http://www.michelemenniti.it/offerta.html
Articoli ElettronicaIN
http://www.michelemenniti.it/elettronica_in.html

gpb01


OK Guglielmo, il problema sarà però mettere a punto la procedura per Windows, grazie.


In realtà NO ... la procedura ormai è praticamente identica sulle tre piattaforme ed è veramente molto semplice ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

nid69ita

Un piccolo appunto per chi scarica la AVR toolchain 3.4.3 per Windows.
Sulla pagina ufficiale di ATMEL:
http://www.atmel.com/tools/atmelavrtoolchainforwindows.aspx
ci sono 2 link, uno alla 3.4.2 (avr8 e avr32) e funziona. Quella al 3.4.3, almeno fino a stamattina, è errato e si risolve in una pagina inesistente. Il link è errato nella parte iniziale. C'e' una scritta che non serve e manca il www. Corretto il link allora scarica senza problemi. Ho segnalato alla Atmel, attendo risposta.

"cmsw1prd.atmel.com" è la parte iniziale errata, deve essere "www.atmel.com"

EDIT: secondo atmel succede solo a me. Hanno provato a scaricare come guest, peccato che sono già registrato e che se uso il fill form mi ri-registra (ma non verificano che la email che gli dò è già registrata? Che sito del menga!!! ).
my name is IGOR, not AIGOR

gpb01


EDIT: secondo atmel succede solo a me.


No, no, succede anche a me da Safari su MAC ... hanno proprio il link sbagliato ... ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

PaoloP


PaoloP

Aggiornando la 1.5.5 con la ToolChain 3.4.3 anche un semplice sketch vuoto
Code: [Select]
void setup() {
 // put your setup code here, to run once:

}

void loop() {
 // put your main code here, to run repeatedly:

}


si interrompe in fase di compilazione e da errore:
Code: [Select]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp: In member function 'String& String::copy(const __FlashStringHelper*, unsigned int)':
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp: In member function 'String& String::copy(const __FlashStringHelper*, unsigned int)':
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:26: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:26: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
 strcpy_P(buffer, (const prog_char *)pstr);
 strcpy_P(buffer, (const prog_char *)pstr);
                         ^
                         ^
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:26: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:26: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:20: error: expected primary-expression before 'const'
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:20: error: expected primary-expression before 'const'
 strcpy_P(buffer, (const prog_char *)pstr);
 strcpy_P(buffer, (const prog_char *)pstr);
                   ^
                   ^
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:20: error: expected ')' before 'const'
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:189:20: error: expected ')' before 'const'
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp: In member function 'String& String::operator=(const __FlashStringHelper*)':
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp: In member function 'String& String::operator=(const __FlashStringHelper*)':
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:39: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:39: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
 if (pstr) copy(pstr, strlen_P((const prog_char *)pstr));
 if (pstr) copy(pstr, strlen_P((const prog_char *)pstr));
                                      ^
                                      ^
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:39: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:39: error: ISO C++ forbids declaration of 'type name' with no type [-fpermissive]
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:33: error: expected primary-expression before 'const'
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:33: error: expected primary-expression before 'const'
 if (pstr) copy(pstr, strlen_P((const prog_char *)pstr));
 if (pstr) copy(pstr, strlen_P((const prog_char *)pstr));
                                ^
                                ^
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:33: error: expected ')' before 'const'
D:\arduino-1.5.5-TC343\hardware\arduino\avr\cores\arduino\WString.cpp:249:33: error: expected ')' before 'const'

leo72

Hai applicato la modifica che ha suggerito Mauro nell'altro thread?
Io con quella ottengo solo un paio di avvisi ma la compilazione termina senza errori.

PaoloP

Ho trovato le modifiche suggerite da MauroTec

L'attributo è "__attribute__ (( __progmem__ ))".
Quando il parser di gcc incontra __attribute__ sa che deve comportarsi in modo diverso in base all'attributo specificato dopo il token __attribute__. Di attributi oltre a __progmem__ c'è n'è tanti altri alcuni dipendenti dalla architettura e/o piattaforma.

Allora la define PROGMEM sarà simile a:
Code: [Select]

#define PROGMEM             __attribute__ (( __progmem__ ))


Il problema con il core parte da qui:
Code: [Select]

//  WString.h - String library for Wiring & Arduino
class __FlashStringHelper;
#define F(string_literal) (reinterpret_cast<const __FlashStringHelper *>(PSTR(string_literal)))


PSTR(s)   ((const PROGMEM char *)(s)), è un cast di una literal string a puntatore in progmem, cioè:
Code: [Select]

((const PROGMEM char *)("miastringinprogmem"))


La define F totalmente espansa diventa:
Code: [Select]
(reinterpret_cast<const __FlashStringHelper *>(((const __attribute__ (( __progmem__ )) char *)("miastringinprogmem")))
Che equivale a dire: miastringinprogmem viene trasformata in un puntatore const PROGMEM char * il quale viene interpretato come puntatore a FlashStringHelper che è una forward declare di una classe inesistente. Tutto sto popò di cast solo per fare in modo che C++ sia in grado di scegliere il metodo corretto da chiamare.

La print da così:
Code: [Select]

size_t Print::print(const __FlashStringHelper *ifsh)
{
 const char PROGMEM *p = (const char PROGMEM *)ifsh;
 size_t n = 0;

dovrebbe diventare
Code: [Select]

size_t Print::print(const __FlashStringHelper *ifsh)
{
 const PROGMEM char *p = (const PROGMEM char *)ifsh;
 size_t n = 0;

Anche se p dovrebbe essere:
Code: [Select]

PGM_P p =  (const PROGMEM char *)ifsh;

PROGMEM dice:
Attribute to use in order to declare an object being located in flash ROM.

Mentre const __FlashStringHelper *ifsh è un puntatore e pertanto il cast dovrebbe essere ancora più semplice
Code: [Select]

PGM_P p =  (PGM)ifsh;


Adesso cerco di capire cosa bisogna modificare e poi provo.

PaoloP

Ho visto che la pgmspace.h, nelle due toolchain (la vecchia dell'IDE 1.0.5 e la nuova 3.4.3), è diversa.
Tutta una serie di typedef, tra cui prog_char, sono stati deprecati.

Non ho capito però cosa c'è da cambiare in WString.cpp per farlo compilare correttamente.

PaoloP

Risolto.

Ho aggiunto in WString.h nel core di Arduino per avr
Code: (WString.h) [Select]
#define __PROG_TYPES_COMPAT__
prima di
Code: [Select]
#include <avr/pgmspace.h>

in modo che risulti
Code: [Select]
#define __PROG_TYPES_COMPAT__
#include <avr/pgmspace.h>


In questo modo vengono ripescati i metodi deprecati e non bisogna modificare tutto il core di Arduino.  :smiley-mr-green:

Go Up