Pages: [1]   Go Down
Author Topic: problemi di conversione con char  (Read 323 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 49
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao. Ho questo tipo di codice :

Code:
char *swap[100];
prog_char impostazioni1[] PROGMEM="Camera";
prog_char impostazioni2[] PROGMEM="Axis";
prog_char impostazioni3[] PROGMEM="Display";
prog_char impostazioni4[] PROGMEM="Back";

PROGMEM char *impostazionix[]={
  impostazioni1,impostazioni2,impostazioni3,impostazioni4
};


In un determinato punto del mio codice chiamo la funzione fillSwapArray(impostazionix)

Code:
void fillSwapArray(char *arr[]){
  for(int i=0;i<3;i++){
  strcpy_P(swap,(char*)pgm_read_word(&(arr[i]))); <==errore 
  }
 
}

Ora ottengo un errore di conversione da char** a char*.
In poche parole devo ripescare gli elementi dell'array depositato in memoria flash con progmem e riversarli nell'array swap[] . Come posso fare? Grazie
Logged

Selvazzano Dentro - Padova
Offline Offline
Edison Member
*
Karma: 44
Posts: 1384
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ogni volta che ho a che fare con i puntatori mi viene sempre il mal di testa!  smiley-grin

Ma perché non usi la EEPROM? Avresti anche il vantaggio di conservare le informazioni dopo il reset. 
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 123
Posts: 9308
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova in questo modo:

Code:
const char stringa1[30000] PROGMEM = "questa stringa si trova nella flash";
char stringa_tst[20];

/*
.
.
.
*/

// copia il contenuto di stringa1 per n caratteri in stringa_tst
 memcpy_P (stringa_tst,&stringa1,10);
Logged

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao. Ho questo tipo di codice :

Code:

char *swap[100];



Giusto per completezza, non serve '*' quando dichiari un array, in C l'array è già un puntatore di suo.
Contiene esattamente l'indirizzo di memoria del primo valore in cui verrà salvato il dato.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

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

Prova in questo modo:

Code:
const char stringa1[30000] PROGMEM = "questa stringa si trova nella flash";
Sì, dovrebbe essere così. Non serve mettere il simbolo di puntatore a char qui altrimenti poi quando più sotto converti esplicitamente il dato letto dalla Flash con (char*) effettui una doppia conversione.
Logged


Pages: [1]   Go Up
Jump to: