SerialCmd - Arduino R4 Minima (problemi di compilazione sketch demo)

Salve, come dicevo l'altro post che provo ad studiarmi la libreria .. solo che io ho l'arduino r4 minima quello senza il wifi.

ma quando provo ad compilare mi da seguenti errori:


D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino: In function 'void set_NLBL()':
D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino:67:62: error: no matching function for call to 'SerialCmd::AddCmd(const arduino::__FlashStringHelper*, int, NULL)'
    mySerCmd.AddCmd ( F ( "LEDBL" ) , SERIALCMD_FROMALL, NULL );
                                                              ^
In file included from D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino:3:0:
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src/SerialCmd.h:104:15: note: candidate: uint8_t SerialCmd::AddCmd(const char*, char, void (*)())
       uint8_t AddCmd ( const char *, char, void ( * ) () );
               ^~~~~~
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src/SerialCmd.h:104:15: note:   no known conversion for argument 1 from 'const arduino::__FlashStringHelper*' to 'const char*'
D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino: In function 'void set_YLBL()':
D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino:72:67: error: no matching function for call to 'SerialCmd::AddCmd(const arduino::__FlashStringHelper*, int, void (&)())'
    mySerCmd.AddCmd ( F ( "LEDBL" ) , SERIALCMD_FROMALL, set_LEDBL );
                                                                   ^
In file included from D:\nb-desktop\luigi\Documents\Arduino\SerialCmd\SerialCmd.ino:3:0:
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src/SerialCmd.h:104:15: note: candidate: uint8_t SerialCmd::AddCmd(const char*, char, void (*)())
       uint8_t AddCmd ( const char *, char, void ( * ) () );
               ^~~~~~
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src/SerialCmd.h:104:15: note:   no known conversion for argument 1 from 'const arduino::__FlashStringHelper*' to 'const char*'

exit status 1

Compilation error: no matching function for call to 'SerialCmd::AddCmd(const arduino::__FlashStringHelper*, int, NULL)'

Idee?.
Grazie mille.

La macro F() funziona solo su AVR e non sulla R4 minima ...
... prendi l'esempio ed elimina la macro dalle due funzioni:

void set_NLBL ( void ) {
   mySerCmd.AddCmd ( "LEDBL", SERIALCMD_FROMALL, NULL );
   sendOK();
}

void set_YLBL ( void ) {
   mySerCmd.AddCmd ( "LEDBL", SERIALCMD_FROMALL, set_LEDBL );
   sendOK();
}

Appena possibile provvederò a correggere l'esempio della libreria.

Guglielmo

invece di modificare si può qui mettere false o qualcosa del genere:

#ifdef __AVR__
#pragma message "INFO: Compiling with AVR F() macro enabled."
#endif

perché da quel poco che so in c++ forse qui basta mettere False e cosi il compilatore capisce che non devo usare le macro.

poi non lo so ..

ora faccio modifiche su quello che mi dici.

ni... poi separare gli esempi per gli arduini AVR e gli arduino r4.. perché leggendo codice mi confondo leggendo sempre gli if endif di avr.

grazie mille e buona serata.

Ti allego il codice di Demo corretto e reso generico ... mancava per quelle due funzioni il controllo che si fosse o meno su AVR: Demo_SerialCmd.zip (1.8 KB)

Guglielmo

P.S.: Il demo è generico per qualsiasi MCU e non specifico per una boad e quindi fa uso delle istruzioni del pre-compilatore per selezionare cose compilare.

altro errore ma mi sa che questa volta non è il demo.
ecco cosa mi dice:

d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src\SerialCmd.cpp: In constructor 'SerialCmd::SerialCmd(arduino::Stream&, char, char*)':
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src\SerialCmd.cpp:145:4: error: 'strlcpy' was not declared in this scope
    strlcpy ( SerialCmd_Sep, SepCh, 2 );
    ^~~~~~~
d:\nb-desktop\luigi\Documents\Arduino\libraries\SerialCmd-1.1.3\src\SerialCmd.cpp:145:4: note: suggested alternative: 'strncpy'
    strlcpy ( SerialCmd_Sep, SepCh, 2 );
    ^~~~~~~
    strncpy

exit status 1

Compilation error: exit status 1

:frowning: ... strlcpy() è una funzione piuttosto standard ... possibile che nella UNO R4 non esista? Vero che ogni piattaforma implementa la <string.h> a suo modo, però ... :roll_eyes:

Al momento non ho una soluzione immediata, si può provare a sostituirla con la strncpy() che limita il numero di caratteri copiati in questo modo:

strncpy ( SerialCmd_Sep, SepCh, 1 );

... non mi piace molto e, nel frattempo, studierò un'alternativa.

Fammi sapere se così funziona ... :roll_eyes:

Guglielmo

... la riga in questione è la riga 145 del file SerialCmd.cpp

Guglielmo

... confermo, QUESTA è la stringatissima implementazione di "string.h" che Renesas fornisce con il suo compilatore ... è la prima piattaforma dove mi capita questa cosa :roll_eyes:

Vedrò di modificare il codice e rilasciare una nuova versione appena possibile, comunque, con la modifica indicata al post precedente, per il momento dovrebbe andare.

Guglielmo

ok, appena posso provo.. ora sono tramite telefono.. domani oppure aspetto che fai la modifica.
grazie mille e buonanotte.

Ti conviene intanto farla tu ... prima che io la faccio, la pubblico ed Arduino aggiorna la libreria nell'IDE ... passa un po' di tempo :roll_eyes:

Guglielmo

Ecco, ho fatto il rilascio della versione 1.1.4 ... dettagli QUI.

Fammi sapere ... grazie.

Guglielmo

ok, ora funziona.. ti ringrazio molto e mi metto allo studio!.

buona giornata.