Rendere compatibili sketch 023/1.0

si puo' fare un esame esaustivo su quali file modificare/aggiungere all'IDE 1.0 per garantire la compatibilita' con tutti gli sketch ?

ad esempio nel mio valvolare ricevo errore Wconstant che a sua volta contiene collegamento ad wiring.h che non e' piu' presente nell'1.0

ho fatto un confronto ed i file mancanti nella 1.0 rispetto alla vecchia release sono:

wiring.h
WConstants.h
WProgram.h
pins_arduino.c
pins_arduino.h

sarebbe comodo fare uno zip da scaricare, allegato a questo post, con i file corretti per garantire retrocompatibilita' senza modifiche.

Che ne pensate ?

Testato:
Che ne pensate ?

Che non mi pare il miglior modo di risolvere questo problema, dato che le differenze potrebbero essere anche a livello di codice, non solo di nome di file.
Meglio allora inserire in tutte le lib che si usano una direttiva per il compilatore per discriminare tra versione 1.0 e non:

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

Leo sei un grande ottima idea

gbm:
Leo sei un grande ottima idea

Grazie ma l'idea non è mia. Semplicemente mi ricordavo di aver letto da qualche parte di questa costante "ARDUINO". Cmq per me resta sempre miglior cosa aspettare ancora per il passaggio alla 1.0 che tutte le lib vengano aggiornate. So che ci vorrà tempo ma d'altronde che te ne fai della versione 1.0 in più rispetto alla 0022/23 se hai una UNO?

scusa l'ignoranza leo, puoi chiarirmi meglio:

  • cosa fa questo codice ?
  • si deve inserire cosi' come e', in tutte le librerie che si usa per un determinato progetto ?
  • Si devono tenere installate entrambe le versioni, 0.23 e 1.0 ?
  • Come si fa a capire se una libreria e' aggiornata per la 1.0 in modo da non mettere questo codice ?

grazie

Testato:
scusa l'ignoranza leo, puoi chiarirmi meglio:

  • cosa fa questo codice ?

Controlla il contenuto della costante ARDUINO che contiene la versione dell'IDE in uso.
E' una direttiva per il compilatore: in base al suo valore modifica in fase di compilazione lo sketch. Nello specifico, carica in base alla versione il file appropriato per integrare le funzioni di Arduino nello sketch.

  • si deve inserire cosi' come e', in tutte le librerie che si usa per un determinato progetto ?

  • Si devono tenere installate entrambe le versioni, 0.23 e 1.0 ?

Secondo tua scelta. Io uso ancora la 0022 e non sento proprio la necessità di passare alla 0023 o alla 1.0, almeno finché non verrà aggiornato il core Tiny a quest'ultima versione.

  • Come si fa a capire se una libreria e' aggiornata per la 1.0 in modo da non mettere questo codice ?

Immagino dal changelog distribuito dallo stesso autore oppure vedendo appunto nel codice se richiama file della vecchia versione dell'Arduino oppure no.

grazie

Prego :wink:

provo immediatamente sul mio progetto e ti fo sapere i risultati.
nel frattempo una piccola polemica: Arduino con questa scelta e' andata contro ad uno dei principali obiettivi dichiarati dalla piattaforma stessa, coe' la facilita' dell'uso dell'hw e sw arduino

non riesco a capire perche' andare controcorrente e eliminare la compatibilita' con le migliaia di librerie esistenti.
IN genere le societa' fann il contrario, si impegnano per aumentare la retrocompatibilita', non abbatterla

Sinceramente credo per rendere un po' più "indipendente" Arduino da Wiring.
Senza note di polemiche, credo che vogliano un po' tagliare il cordone ombelicale col passato, non rinnegando le origini di Arduino (bene o male è nato grazie al creatore di Wiring, inteso come linguaggio e come scheda di prototipazione) ma evidenziando così la sua differenza ed identità personale.

piccola dimenticanza : dove inserire questo codice ? in quale file ed in che punto delle librerie ?

Generalmente nel file .h principale della lib, in testa a tutto.

facciamo un esempio pratico, che puo' essere utile a tutti

nel mio sketch ho questo:

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>
#include <EEPROM.h>

wire.h ed eeprom.h sono le librerie ufficiali, quindi nella 1.0 sono gia' aggiornate e non devo toccarle giusto ?

la DS1307.h la sistemo aggiungendoci il tuo codice

non capisco invece la WProgram.h, non e' una libreria giusto ? e' un file integrato nella 0.23

  • perche' lo si richiama negli sketch se ' integrato nell'IDE ?
  • come lo sistemo per la questione 1.0 ?

WProgram.h è l'header di Arduino, che si può considerare una libreria/estensione del C che aggiunge le funzioni proprie di Arduino (ad esempio DigitalWrite, AnalogRead, millis ecc...) necessarie per gestire l'HW della scheda.
Quel file è richiamato in automatico durante la compilazione degli sketch (fino alla versione 0023). Ecco il file main.cpp contenuto in /arduino-0022/hardware/arduino/cores/arduino/:

#include <WProgram.h>

int main(void)
{
	init();

	setup();
    
	for (;;)
		loop();
        
	return 0;
}

Come vedi, ogni sketch veniva "riportato alla normalità" di un comune file C/C++ con il suo main() che contiene il codice in setup() ed in loop(), ma prima vedi la chiamata a WProgram, per integrare le funzioni precostituite di Arduino.

Questo è invece quello della 1.0:

#include <Arduino.h>

int main(void)
{
	init();

#if defined(USBCON)
	USB.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}

Come vedi, richiama Arduino.h.

quindi e' inutile inserirlo negli sketch ? perche' lo si trova piu' o meno in tutti ? forse nelle primissime versioni non era richiamato in automatico ?

ho provato a commentarlo, sulla versione 0.23 e mi da errori,

// #include <WProgram.h>

forse non ho capito quindi ? non viene inserito automaticamente ?

perche' nel BLINK non c'e' e funziona ?

Qui tocca mettere questa cosa in evidenza altrimenti nei prossimi mesi toccherà ripeterlo tutti i giorni.
Per compilare uno sketch 0022, o 0023, basta aggiungere in "..\arduino-1.0\hardware\arduino\cores\arduino" il fileWrogram.h contenente :

#include "Arduino.h"

Questo sistema automaticamente tutte le dipendenze, però rimangono da sistemare a mano gli eventuali metodi deprecati con quelli nuovi, e se è all'interno di una libreria di terze parti, cioè non fornita con l'IDE, tocca intervenire direttamente sulla stessa.
Inutile dire che in breve tempo gli sviluppatori seri aggiorneranno le loro librerie per poter funzionare con la versione 1.0.

spetta ma questo e' un secondo metodo rispetto a quello di Leo ?

cioe' se sistemo le librerie con il codice summenzionato resta comunque necessario creare questo file ed inserirlo nella 1.0 ?

Testato:
spetta ma questo e' un secondo metodo rispetto a quello di Leo ?

Leo ti ha suggerito una strada per rendere le librerie compatibili con la 0022 e la 1.0, e comunque non basta, io ti sto indicando un modo per risolvere senza toccare le librerie e gli sketch per quanto riguarda le varie dipendenze, cioè tutti i file .h utilizzati durante la compilazione.

ma visto che nel mio sketch wprogram.h e' richiamato direttamente in cim al listato, come una libreria:

  1. posso sostituirlo nello sketch direttamente con arduino.h
  2. perche' se lo tolgo (anche sulla 023) ricevo errori di compilazione ? non dovrebbe essere inserito automaticamente come ha detto leo ?

aggiungo l'errore che ricevo io.
Ho sia creato il file come detto da astro, che inserito nella libreria indicata il codice di leo

ma la libreria va in errore per un altro file, WConstants.h, anch'esso non presente nella 1.0

In file included from Testato1_clock_data_temp_RTC.cpp:159:
D:\Backup\Elettronica\Arduino\arduino-1.0\libraries\DS1307/DS1307.h:18:24: error: WConstants.h: No such file or directory

E qui si torna a quanto ti dicevo prima io. Non solo va sistemata l'IDE affinché trovi i giusti file, vanno poi riguardate le lib.

uesto sistema automaticamente tutte le dipendenze, però rimangono da sistemare a mano gli eventuali metodi deprecati con quelli nuovi, e se è all'interno di una libreria di terze parti, cioè non fornita con l'IDE, tocca intervenire direttamente sulla stessa.

WCostants.h è un file che non è chiamato direttamente da WProgram.h. Quindi se DS1307.h lo invoca, non lo trova per forza. Devi vedere nell'IDE 1.0 qual è il file che lo ha sostituito e modificare la lib.