Vai al contenuto
PLC Forum


Inizializzazione Array - Programmazione in C


peter76

Messaggi consigliati

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 globale

unsigned 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.

Ciao

Marco

Link al commento
Condividi su altri siti


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 assegnamenti

Angolo[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

premessa:

- programmo in C su PC

- non conosco i PIC

dovresti dichiarare cosi' la tua variabile Angolo:

unsigned char *Angolo;

poi le 4 tabelle

unsigned 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

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.

Grazie

Marco

Link al commento
Condividi su altri siti

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...