Vai al contenuto
PLC Forum


Salvare Una Struct Su Eeprom


walterword

Messaggi consigliati

ammettiamo di avere una struttura dati composta da vari tipi di dati , tra cui float, int ect

Ipotizziamo di lavorare con un micro ed utilizzare un compialtore in C .

visto e considerato che una eeprom si scrive " un byte alla volta " da un array di bytes , cosi come si spedisce un "byte alla volta " in una comunciazione per esempio seriale , come e' possibile

creare una funzione che prenda (estrapolando ) tutti y bytes che compongono i dati dalla struttura .

Bisognerebbe prendere un dato alal volta e creare un byte prendendo il primo byte del dato float , poi shiftare di 8 bit e creare un altro byte e via dicendo , uno per uno .

Scrivere invece un ciclo for come potrebbe essere fatto tutto il discorso ?

ciao

walter

Link al commento
Condividi su altri siti


Ciao Walter , come hai detto tu in eeprom si scrive un byte alla volta , quindi o hai il compilatore che fa cio' per te oppure credo che ti convenga fare due funzioni : una per la scrittura ed una per la lettura.

Ciao :)

Link al commento
Condividi su altri siti

Il programma seguente, compilato con il C18 della Microchip e simulato con MPLAB, prende un byte alla volta dalla struttura dati e li passa a una funzione che lo scrive sulla eeprom.

typedef struct 
{
  char c;
  int i;
} DATI; //struttura di 3 byte

unsigned char size, n;
void *p;                   //puntatore generico
unsigned char byte;
DATI dati = {0x11, 0x2233}; //inizializza struttura con dei valori

void write(unsigned char b)
{
    //Scrive il byte b sulla eeprom    
}

void main (void)
{
  p = &dati;     //p punta all'inizio della struttura
  size = sizeof(dati);     //ricava la dimensione in byte della struttura
  for(n=0; n<size; ++n)
  {
     byte = *(unsigned char*)p; //acquisisce un byte della struttura
     write(byte); 
     p = p + 1;                  //incrementa puntatore
  }
  while(1);
}

Dovrebbe funzionare anche con i float.

E' quello che cercavi?

Ciao.

Link al commento
Condividi su altri siti

si

volevo giustappunto capire come poter sviluppare una cosa del genere

ed hai centrato in pieno il concetto

grazie

walter

p.s. per Ifach : se leggi bene il post , dico che stoi usando un compilatore in C ;)

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