Go Down

Topic: problemi di conversione con char (Read 364 times) previous topic - next topic

Augusto Picciani

ciao. Ho questo tipo di codice :

Code: [Select]

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: [Select]

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

cyberhs

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

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

astrobeed

Prova in questo modo:

Code: [Select]

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

niki77


ciao. Ho questo tipo di codice :

Code: [Select]


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.
Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

leo72


Prova in questo modo:

Code: [Select]

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.

Go Up