Ottimizziamo il codice del core di Arduino

gpb01: l'esempio di WebServer della Ethernet ... va in errore ... =( =( =(

Sulla 1.5.5 + TC 3.4.3 nessun errore e nessun warnings durante la compilazione. Non è che statecorreggendo cose già corrette nel passaggio tra la 1.0.5 e la 1.5.5. Mi pare un lavoro inutile. Non è meglio lavorare sul codice più recente e migliorarlo invece di inseguire codice più datato?

Ripeto che l'unica modifica che ho fatto è quella del #define per il workaround delle definizione deprecate in pgmspace.

Io ho scaricato la 1.5.x ma non riesco a trovare dentro il tree dei sorgenti la verisone precisa di ciò che ho scaricato. Comunque, il core di ciò che ho scaricato non contiene queste modifiche.

Se a te non da questi warning abilitando da preference vuol dire che hanno disabilitato i warning (forse).

Riguardo a questo:

l'esempio di WebServer della Ethernet ... va in errore ... smiley-cry smiley-cry smiley-cry

gpb01 aveva iniziato ad apportare la modifica a IPAddress in base al mio suggerimento iniziale ma non avevo modificato Ethernet.cpp per cui riceveva errori.

Ciao.

Paolo ... ho idea che stai sbagliando da qualche parte la verifica ... ... IPAddress per AVR è identico sulla 1.5.5 e sulla 1.0.5 ... e se da problemi da una parte, deve dare problemi anche dall'altra !!!

Quindi ... ... ricontrolla che effettivamente stai usando la toolchain 3.4.3 e che non l'hai messa nel posto sbagliato (e quindi continua a usare la vecchia), controlla di aver messo verbose nella compilazione, ecc. ecc.

Essendo il compilatore lo stesso .. ti rendi conto che NON può in un caso segnalare un problema ed in un altro no ... visto che i due sorgenti sono gli stessi ! ;)

Guglielmo

Edit : Su Mac ( ma su Win è simile) il percorso per il core AVR è :

/Applications/Arduino 1.5.5.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino

Confermo che sono quasi identici tra 1.0.5 e.1.5.5
C’e’ solo una differenza, nella 1.5.5 c’e’ all’inizio questo include che manca nella 1.0.5

#include <stdint.h>

Uso il programma BeyondCompare per trovare le differenze di codice tra stessi file in due cartelle.

Ok Paolo, effettivamente ho sostituito la toolchain nella 1.5.5 ed ho provato a compilare il WiFiServer e ... chiedo scusa, HAI RAGIONE !!! XD XD XD

Ma, controllando la compilazione ... mi sembra di NON vedere più usato IPAddress.cpp :astonished: :astonished: :astonished:

Ecco perché non ti da errore !!! Probabilmente hanno cambiato la libreria WiFi e la Ethernet per non includerlo più ... :roll_eyes: :roll_eyes: :roll_eyes:

Occorre una verifica delle lib ...

Guglielmo

Mi correggo di nuovo LO USA, ma con la seguente stringa di compilazione :

/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.5.5 TL 3.4.3.app/Contents/Resources/Java/hardware/tools/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=155 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.5.5 TL 3.4.3.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino -I/Users/gpb01/Desktop/Prove Toolchain/Arduino 1.5.5 TL 3.4.3.app/Contents/Resources/Java/hardware/arduino/avr/variants/standard /Users/gpb01/Desktop/Prove Toolchain/Arduino 1.5.5 TL 3.4.3.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/IPAddress.cpp -o /var/folders/td/xjbgg2n97rl9wsy40_rsj90h0000gn/T/build6874946970987828386.tmp/IPAddress.cpp.o

... Mauro .. ti dicono qualche cosa tutte quelle direttive ???? :astonished: :astonished: :astonished:

Guglielmo

@Guglielmo, nelle 2 cartelle del core 1.0.5 e 1.5.5 i file che mi risultano diversi sono: Arduino.h (aggiunta funzione void yield(void) come dichiarazione) CDC.cpp HardwareSerial.cpp e .h IPAddress.h USBAPI.h USBCore.cpp wiring.c (nella delay() richiama la yield() !?!) wiring_analog.c WString.cpp e .h (hanno aggiunto un pò di metodi per le stringhe in flash ram) (Eliminato malloc.c e aggiunto hooks.c) Tutto il resto è identico.

Si nid, ma ho fatto adesso la comparazione dei due IPAddress.h (utilizzando DeltaWalker, e non ad occhio) e, l’unica differenza, è appunto l’include :

#include <stdint.h>

Guglielmo

IPAddress è usata, e si è "spostata" nelle librerie core (o forse è sempre stata lì?) ora controllo...

BALORDI!!! -w è di default, ora nascondono tutti i warning!! MALOOO!!!! apro subito un bug

edit: nid prossima volta controlla bene, se metti su verbose vedesisubito il maledetto -w

/avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=155 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -I/...

\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -MMD -mmcu=atmega328p -DF_CPU=16000000L  -DARDUINO=105 -DUSB_VID=null -DUSB_PID=null  -I/...

@Guglielmo ho messo anche la compilazione da me della 1.0.5 e la tua, togliendo dagli include in poi Han solo tolto "all" da -W Le altre define che fanno? I vari -D qualcosa ?

lesto: ... BALORDI!!! -w è di default, ora nascondono tutti i warning!! MALOOO!!!! apro subito un bug ...

Ma sono matti ??? E' vero, guarda la riga di copilazione che ho messo QUI ... nonostante il verbose ... c'è proprio il -w ... che Dio li fulmini !!!

@Paolo : ecco perché non vedi warning :grin: :grin: :grin:

Guglielmo

lesto: BALORDI!!! -w è di default, ora nascondono tutti i warning!! MALOOO!!!! apro subito un bug

:fearful:

Si risolve facilmente editando nel file platform.txt la riga

compiler.c.flags=-c -g -Os -w -ffunction-sections -fdata-sections -MMD

parlo sempre della versione 1.5.5

BALORDI!!! -w è di default, ora nascondono tutti i warning!! MALOOO!!!! apro subito un bug

:grin:

@PaoloP Si risolve facilmente editando nel file platform.txt la riga Ottimo, la 1.55 allora permette di modificare i flags, prova ad aggiungere -save-temps, ti tornerà utile in molte occasioni.

Ciao.

C’è comunque un problema … anche se metti verbose, non mette la -Wall … =( =( =(

Tocca metterla a mano …

Guglielmo

P.S. : Ovviamente, mettendola, saltano fuori TUTTI i warning che Mauro ha risolto :wink:

Si Mauro. E' altamente customizzabile e ci sono flag per tutti i gusti e tutte le situazioni

compiler.c.cmd=avr-gcc
compiler.c.flags=-c -g -Os -w -ffunction-sections -fdata-sections -MMD
compiler.c.elf.flags=-Os -Wl,--gc-sections
compiler.c.elf.cmd=avr-gcc
compiler.S.flags=-c -g -assembler-with-cpp
compiler.cpp.cmd=avr-g++
compiler.cpp.flags=-c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -MMD
compiler.ar.cmd=avr-ar
compiler.ar.flags=rcs
compiler.objcopy.cmd=avr-objcopy
compiler.objcopy.eep.flags=-O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0
compiler.elf2hex.flags=-O ihex -R .eeprom
compiler.elf2hex.cmd=avr-objcopy
compiler.ldflags=
compiler.size.cmd=avr-size
# this can be overriden in boards.txt
build.extra_flags=

Guglielmo hai fatto la modifica anche per il compilatore cpp?

grazie paolo, provvedo subito. In tatnochi ha account dia mano forte a far apparire il bug: https://github.com/arduino/Arduino/issues/1728

quanto tempo che perdete con la roba GNU!

con roba ARDUINO vorrai dire...

PaoloP: ... Guglielmo hai fatto la modifica anche per il compilatore cpp?

Si, ho tolto la -w ad entrambi e ... ora ho aggiunto la -Wall al entrambi ;)

Guglielmo

-Wall abilita tutte le warning. Le -Dxx sono macro utente visibili in ogni unit compile, come appunto la versione dell'ide -DARDUINO=155

Ciao.

clonato il repo: https://github.com/lestofante/Arduino/blob/ide-1.5.x

già rimossa l'infame -w, se mi fate un riassunto delle modifiche le carico, graaaazie :)

partiamo dalla toolchain originale, arduino 1.5.4 (la 1.0.x lasciamola perdere per favore)

con -Wall ecco i warning di un codice base:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly: 
  
}
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp: In function 'void __vector_18()':
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp:89: warning: unused variable 'c'
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp: In member function 'void HardwareSerial::begin(long unsigned int, byte)':
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/HardwareSerial.cpp:329: warning: unused variable 'current_config'
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/Tone.cpp:119: warning: only initialized variables can be placed into program memory area
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/Print.cpp: In member function 'size_t Print::print(const __FlashStringHelper*)':
/home/mauro/arduino-1.5.4/hardware/arduino/avr/cores/arduino/Print.cpp:44: warning: '__progmem__' attribute ignored