peter76 Inserito: 8 giugno 2005 Segnala Share Inserito: 8 giugno 2005 Ciao a tutti,ho un problema con l'inizializzazione di un array.Premetto che sto programmando in C un pic18f452.Devo inizializzare un array di 40 elementi in funzione della presenza o meno di due jumper; in pratica ho quattro tabelle a disposizione e in base a come sono settati i jumper seleziono una tabella o l'altra.Scrivendo l'inizializzazione in questo modo:Angolo[] ={5,6,7,8,9,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};e dichiarando a livello globaleunsigned char Angolo[40];il compilatore mi da errore.Se scrivo in questo modo, all'interno della procedura chiamata:unsigned char Angolo[] ={5,6,7,8,9,10,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};il compilatore non mi da alcun errore, ma è una variabile locale i cui valori perdo appena esco dalla procedura.Quello che voglio fare è dichiarare l'array a livello globale e inizializzarlo all'interno di una procedura che viene chiamata prima di ogni ciclo di lavoro.C'è un modo veloce per inizializzare ogni volta l'array senza dover scrivere:Angolo[0]= 5;Angolo[1]= 6;............Angolo[39]= 100;Teniamo conto che ho otto tabelle: 4 per i 50 Hz e 4 per i 60 Hz.CiaoMarco Link al commento Condividi su altri siti More sharing options...
andrea.fa Inserita: 8 giugno 2005 Segnala Share Inserita: 8 giugno 2005 Se vuoi inizializzare i valori di un array devi farlo una-tantum dove lo dichiari. Se ho capito bene il tuo problema potresti crearti 8 array (ad esempio angolo1...angolo8) con i valori che desideri e poi all'interno delle tue funzioni usi un ciclo for per copiare i valori dell'array di riferimento su quello di lavoro. Altra soluzione meno avida di risorse e' quella di usare tutta una serie di assegnamentiAngolo[0]= 5;Angolo[1]= 6;ecc.magari isolando tutta la manfrina all'interno di una apposita funzione così che se devi assegnare 100 volte i valori dell'array non devi riscrivere tutto ogni volta....Andrea Link al commento Condividi su altri siti More sharing options...
ilmira Inserita: 8 giugno 2005 Segnala Share Inserita: 8 giugno 2005 premessa:- programmo in C su PC- non conosco i PICdovresti dichiarare cosi' la tua variabile Angolo:unsigned char *Angolo;poi le 4 tabelleunsigned char tab1[40]={ 1,2,.. };unsigned char tab2[40]={ 1,2,.. };unsigned char tab3[40]={ 1,2,.. };unsigned char tab4[40]={ 1,2,.. };poi inizializzi:void init ( void ){ switch( jmper() ) { case 1: Angolo=tab1; break; case 2: Angolo=tab2; break; case 3: Angolo=tab3; break; case 4: Angolo=tab4; break; }}nel resto del tuo programma l'uso di Angolo non cambia; Link al commento Condividi su altri siti More sharing options...
peter76 Inserita: 8 giugno 2005 Autore Segnala Share Inserita: 8 giugno 2005 Ottima soluzione quest'ultima!Unico problema lo spazio di memoria che nei microcontrollori è piuttosto limitato.Comunque alla fine ho risolto...in modo non troppo elegante ma ho comunque risolto.GrazieMarco Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora