Go Down

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

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy