problemi di conversione con char

ciao. Ho questo tipo di codice :

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)

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

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

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

Prova in questo modo:

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);

franhk77:
ciao. Ho questo tipo di codice :

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.

astrobeed:
Prova in questo modo:

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.