Pages: 1 [2] 3 4 ... 9   Go Down
Author Topic: [MAC] Aggiornamento IDE 1.0x all'ultima versione Atmel Toolchain  (Read 6449 times)
0 Members and 1 Guest are viewing this topic.
Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, accettiamo allora che le due serie di "warning" sopra riportate siano "warning trascurabili" dovuti ad una ... non ottima stesura del codice di Arduino smiley-wink


Il problema seguente mi sembra invece più importante ed andrebbe risolto :

Code:
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.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.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.cpp:44:23: warning: '__progmem__' attribute ignored [-Wattributes]

... il fatto che ignori l'attributo __progmem__ non va proprio bene e quindi occorre vedere come correggere Print.cpp per risolvere questo problema.

Ogni aiuto e suggerimento è ovviamente ben accetto smiley-wink

Guglielmo
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se apro l'IDE e compilo lo sketch con solo void setup e void loop ricevo gli errori di cui stiamo discutendo.
Se però prendo ed inserisco anche un solo spazio vuoto nel file e ricompilo, spariscono TUTTI gli errori...  smiley-eek
Se aggiungo un'istruzione REALE, come ad esempio la stampa su seriale con la funzione F() (costringendo quindi l'uso di PROGMEM), non ho nessuna segnalazione di errore!  smiley-eek smiley-eek
Logged


Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
Se aggiungo un'istruzione REALE, come ad esempio la stampa su seriale con la funzione F() (costringendo quindi l'uso di PROGMEM), non ho nessuna segnalazione di errore!  smiley-eek smiley-eek

 smiley-eek smiley-eek smiley-eek peggio .. invece a me, se nell loop() metto Serial.print (F("pippo")); ... proprio non compila più e mi da un errore :

Code:
prova.ino: In function 'void loop()':
prova.ino:11:16: error: variable '__c' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

Tu hai un esempio che compila correttamente SENZA warning ed errori ?

Guglielmo
Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

No. Ottengo sempre quei warning.
Ho fatto caso ad una cosa, la seconda volta che compilo, anche se modifico il sorgente, non mi da più warning perché usa le lib che ha già compilato in precedenza. Me ne sono accorto rileggendo l'output sul terminale e poi cambiando chip, costringendo quindi l'IDE a ricompilare tutto da capo.

Logged


Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa, prova a compilare questo :

Code:
void setup() {
  
  delay(2000);
  Serial.begin(9600);
  
}

void loop() {
  
  Serial.print(F("pippo"));
  
}

... piuttosto banale direi, ma ... non digerisce la Serial.print(F());

Code:
prova.ino: In function 'void loop()':
prova.ino:10:16: error: variable '__c' must be const in order to be put into read-only section by means of '__attribute__((progmem))'

... e non capisco bene che attributo occorre aggiungere per eliminare l'errore (... porca zozza più costante di una stringa fissa ... boh) e comunque ... non vorrei fosse legato a quel warning che segnalavo prima (... nella Print.cpp) ... smiley-sad

Guglielmo
« Last Edit: September 06, 2013, 08:45:45 am by gpb01 » Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

A me la Serial.print con l'F() funziona.

Piuttosto, se io apro il file Print.cpp e sostituisco la funzione Print::print dalla riga 42 alla riga 54 con la seguente:
Code:
size_t Print::print(const __FlashStringHelper *ifsh)
{
  //const char PROGMEM *p = (const char PROGMEM *)ifsh; <-- codice originale
  PGM_P p = (PGM_P)ifsh; //nuovo codice
  size_t n = 0;
  while (1) {
    unsigned char c = pgm_read_byte(p++);
    if (c == 0) break;
    n += write(c);
  }
  return n;
}

non ottengo più nessun warning relativamente al file Print.cpp ed a __progmem__.

PS: la soluzione l'ho trovata studiando il reference del file avr/pgmspace.h:
http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html

EDIT:
no, non va bene. PGM_P viene sostituito con const char *, manca PROGMEM. Sarebbe da usare PSTR ma mi dice che non è dichiarato...  smiley-roll-blue
« Last Edit: September 06, 2013, 08:58:27 am by leo72 » Logged


Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, ho sostituito la linea ed effettivamente la copilazione va a buon fine, ma i warning si sprecano ... possibile che tu non li abbia ???

Code:
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void store_char(unsigned char, ring_buffer*)':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:98:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_25()':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:127:21: warning: unused variable 'c' [-Wunused-variable]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_36()':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:153:21: warning: unused variable 'c' [-Wunused-variable]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_51()':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:168:21: warning: unused variable 'c' [-Wunused-variable]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In function 'void __vector_54()':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:183:21: warning: unused variable 'c' [-Wunused-variable]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In member function 'void HardwareSerial::begin(long unsigned int, byte)':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:368:11: warning: unused variable 'current_config' [-Wunused-variable]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp: In member function 'virtual size_t HardwareSerial::write(uint8_t)':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/HardwareSerial.cpp:467:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]


Code:
In file included from /Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.cpp:3:0:
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.h: In member function 'IPAddress::operator uint32_t()':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.h:51:55: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.h: In member function 'bool IPAddress::operator==(const IPAddress&)':
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.h:52:75: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.0.5 TL.app/Contents/Resources/Java/hardware/arduino/cores/arduino/IPAddress.h:52:108: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]


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


Quindi ... l'errore di prima SCOMPARE, ma i warning stanno sempre li ... smiley-sad

Guglielmo

P.S. : Naturalmente "Show verbose output during compilation" ... altrimenti non li vedi smiley-wink
« Last Edit: September 06, 2013, 09:07:59 am by gpb01 » Logged

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

Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... i primi due gruppi credo siano sempre classificabili come "warning trascurabili" ma il terzo NO !!!

Nel senso ... compila, ma sembra che IGNORI l'attributo __progmem__ e ... questo NON va bene  smiley-roll

Guglielmo
« Last Edit: September 06, 2013, 09:12:36 am by gpb01 » Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

1) pare che copi dalla Flash.... la dimensione è identica al file compilato con la lib originale.

2) quei warning li ho anch'io ma sono riferiti a HardwareSerial.cpp mentre ora stavamo parlando di Print.cpp  smiley-wink
Comunque a vederli sono sempre derivanti dal codice non riveduto, se noti sono segnalazioni di variabili non utilizzate o confronti fra tipi di dato differenti.
Gli ultimi warning, quelli da IPaddress, come detto in precedenza, non li capisco proprio.
Logged


ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aggiungo una piccola cosa a proposito dei warning sulla HardwareSerial.cpp
Li da anche con IDE 1.05 STANDARD, con toolschain non aggiornata:
Code:
H:\Arduino\STANDARD_arduino-IDE\hardware\arduino\cores\arduino\HardwareSerial.cpp:127: warning: unused variable 'c'

Dal mio percorso si vede che ho usato la versione originale che ho tenuto (non si sa mai)
« Last Edit: September 06, 2013, 09:27:33 am by nid69ita » Logged

my name is IGOR, not AIGOR

Switzerland
Online Online
Faraday Member
**
Karma: 113
Posts: 5955
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

...
2) quei warning li ho anch'io ma sono riferiti a HardwareSerial.cpp mentre ora stavamo parlando di Print.cpp  smiley-wink
Comunque a vederli sono sempre derivanti dal codice non riveduto, se noti sono segnalazioni di variabili non utilizzate o confronti fra tipi di dato differenti.
Gli ultimi warning, quelli da IPaddress, come detto in precedenza, non li capisco proprio.

Leo, naturamente stai usando l'IDE 1.0.5 ufficiale NON una tua night build vero ???  smiley-lol Perché dobbiamo fare una cosa generica per tutti, non per chi si compila anche l'IDE smiley-wink

Io parlavo del terzo gruppo di warning :

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

che riguarda proprio Print.cpp riga 44 in cui ... IGNORA l'attributo __progmem__ (... ma almeno con la tua modifica arriva a fine compilazione) !!!

Guglielmo
« Last Edit: September 06, 2013, 09:23:50 am by gpb01 » Logged

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

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io ho una 1.0.5 che ho scaricato un mesetto fa da Github e ricompilato...  smiley-sweat non credo però abbia modifiche a questi file.
Logged


ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Gli ultimi warning, quelli da IPaddress, come detto in precedenza, non li capisco proprio.
Nella classe IPAddress  c'e' un membro private di nome _address e questa funzione sembra che ne ritorni il puntatore.
Code:
operator uint32_t() { return *((uint32_t*)_address); };
L'errore punta come colonna esattamente all'ultima s di _address
Secondo me si può ignorare come errore.
« Last Edit: September 06, 2013, 09:47:34 am by nid69ita » Logged

my name is IGOR, not AIGOR

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 86
Posts: 4954
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
size_t Print::print(const __FlashStringHelper *ifsh)
{ const char PROGMEM *p = (const char PROGMEM *)ifsh; <-- codice originale
...  return n;
}
PS: la soluzione l'ho trovata studiando il reference del file avr/pgmspace.h:

Ma scusate, la PROGMEM metterebbe la variabile nel memoria programma invece che in ram, giusto?
Capisco che si chieda di fare questo per una variabile globale, ma per una variabile interna ad una funzione?
Non è che ora il compilatore tende ad ignorare la PROGMEM perchè, oltre a const vuole anche che si dichiari static, qualificazione
che prima faceva da solo ?
Logged

my name is IGOR, not AIGOR

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22798
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Difatti non sono sicuro al 100% del mio fix.
Probabile che facendo come dici tu sia meglio.
Logged


Pages: 1 [2] 3 4 ... 9   Go Up
Jump to: