Era già ver[10];
Però deve essere: ver[nchar]='\0';
Adesso va bene.
Grazie!
(Riuscirò mai a entrare nella mentalità necessaria per capire le stringhe?... Mah!... )
Era già ver[10];
Però deve essere: ver[nchar]='\0';
Adesso va bene.
Grazie!
(Riuscirò mai a entrare nella mentalità necessaria per capire le stringhe?... Mah!... )
Fatta una funzione che lo calcola e che fa qualche controllo:
char ver[10];
void setup()
{ delay(1000);
Serial.begin(9600);
Serial.println("avvio...");
GetVersion(__FILE__,ver,sizeof(ver));
Serial.println(__FILE__);
Serial.println(ver);
}
void GetVersion(const char *p_File,char* p_Ver,byte p_Dim)
{ char *pStr; byte NumChr;
pStr=strrchr(p_File,'v'); // cerca v
if(pStr==0) pStr=strrchr(p_File,'V'); // se non trova v cerca V
if(pStr==0) return; // non trova ne v ne V
NumChr=strlen(pStr)-4;
if(NumChr>=p_Dim) NumChr=p_Dim; // se versione > dimensione buffer accorcia
strncpy(p_Ver,pStr,NumChr);
p_Ver[NumChr+1]='\0';
}
void loop() { }
Un mio esempio di output su Monitor Seriale:
avvio...
D:\Elettronica\Arduino\arduino-IDE\portable\sketchbook\prgVersioni_1_v1.45\prgVersioni_1_v1.45.ino
v1.45
Il problema è che FILE non può stare nel setup, perché il setup spesso sta in file con nome diverso da quello principale, ad esempio setup.ino. FILE deve essere copiato e abbandonato prima del setup.
Comunque, quelle poche righe vanno benissimo!
char *percorso=__FILE__;
void setup()
{
char *ver_ext=strrchr(percorso,'v');
char ver[10];
byte n_car=strlen(ver_ext)-4;
strncpy(ver,ver_ext,n_car);
ver[n_car]='\0';
}
P.s.: preferisco n_car perché si distingue subito da char
Datman:
...Così leggo v1.45.ino...
Ma la versione non era nel nome della sottocartella e non del file?
Maurizio
La versione è scritta alla fine del nome della cartella e alla fine del nome del file omonimo. In quest'ultimo caso non bisogna risalire di un livello, ma bisogna togliere .ino.
Boh
Io tra riposino postprandiale e abbiocco estivo ho fatto un pomeriggio tra letto, lettino in piscina e amaca in pineta
Quindi ho letto poco e capito meno
In quale post trovo un demo della FILE?
Così do qualche 'osso da rodere' al cerebro (non al cerbero)
Datman:
La versione è scritta alla fine del nome della cartella e alla fine del nome del file omonimo. In quest'ultimo caso non bisogna risalire di un livello, ma bisogna togliere .ino.
Quindi tra l'ultima barra e la V immediatamente precedente
Mi sembra paurosamente facile...
Qui ho solo telefonino
Aspettate che faccio un po' di copiaincolls
maubarzi:
Ma la versione non era nel nome della sottocartella e non del file?Maurizio
Parliamo di sketch Arduino, il nome del file .ino e la cartella devono coincidere (almeno credo).
Datman:
Il problema è che FILE non può stare nel setup, perché il setup spesso sta in file con nome diverso da quello principale, ad esempio setup.ino. FILE deve essere copiato e abbandonato prima del setup.
No invece non c'e' problema. Fai la stessa cosa, ovvero invece di passare FILE alla GetVersion gli passi percorso.
char *percorso=FILE; // var. globale
char ver[10];
...
GetVersion(percorso,ver,sizeof(ver));
...
Niente
Col solo furbofono, senza una tastiera, non ne esco
Mi limito a leggere, per ora
Mi sono fatto prestare una tastiera, con sotto un pc
char * percorso=__FILE__;
char versione[10]={0};
// deve essere abbastanza lungo, contando anche il terminatore
char * fine=strrchr(percorso,'\\');
// trovo la fine
char * inizio= fine;
while(* inizio != '\\' && * inizio!='V' && * inizio !='v'){
inizio--;
}
// trovo l'inizio
if ( * percorso =='\\'){
percorso++;
}
// escludo l'eventuale barra
strcpy(versione, inizio, fine-inizio);
// copio con l'aritmetica dei puntatori
Non saprei se va, provare...
@Standard, forse ultima istruzione deve essere strncpy()
Temo tu abbia ragione
Pensavo alla memcpy....
Che forse va bene pure lei
Ok, grigliata finita, vado per il digestivo
Standardoil:
Quindi tra l'ultima barra e la V immediatamente precedenteMi sembra paurosamente facile...
E' quello che mi son detto pure io, e reputando Gianluca NON un utonto quadratico medio, faticavo a capire dove fosse il problema.
Lui però ci deve aver messo un po' del suo, perchè se i calori estivi non mi ingannano, alternava la ricerca sulla cartella superiore e sul file a seconda dell'umidità e/o delle mie domande per mandarmi in overheat il cervelletto
Standardoil:
Mi sono fatto prestare una tastiera, con sotto un pc...
Non saprei se va, provare...
La logica mi pare corretta, magari ci sarà qualche ciapino qua e là da sistemare, ma potrebbe essere un facile esercizio lasciato al lettore e la scusa per dire di non aver preparato la pappa pronta 8) .
Maurizio
P.S.
Standardoil:
Io tra riposino postprandiale e abbiocco estivo ho fatto un pomeriggio tra letto, lettino in piscina e amaca in pineta
Mi sembri la risposta ad una definizione da cruciverba: uno orizzontale: standardoil!
Buongiorno, Mau
Ho spiegato tutto il rebus nel messaggio n.27. Ti è sfuggito?
No, ho provato a ripartire da quello ma evidentemente non ho interpretato correttamente.
Comunque, lasciando al caldo la spiegazione delle varie incomprensioni, con l'approccio di standardoil se ne dovrebbe venir fuori, giusto?
Maurizio
Veramente ho già risolto, come detto, con la soluzione al messaggio n.34, corretto come nel n.42!
Ottimo allora, io vedo di far partire l'aria condizionata per portare i neuroni all'attività normale
Maurizio
maubarzi:
P.S.
Mi sembri la risposta ad una definizione da cruciverba: uno orizzontale: standardoil!
Complimenti, grande definizione
Ho sempre affermato, per essere più precisi mi sono sempre vantato, di essere un sibarita