Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Copia di array
Forum - C/C++ - Copia di array

Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:40
Domenica, 18/10/2015
Buonasera a tutti, ho necessità di fare un copia incolla secco di un array in un EEPROM. Le parole su EEPROM sono da un byte. Ora dovrei creare una funzione che accetti in ingresso un qualsiasi array, un indirizzo della EEPROM e il numero di elementi nell'array e che quindi copi i byte dell'array esattamente come sono disposti nella EEPROM.
Piccolo punto dolente, purtroppo è praticamente piu di un anno (forse due) che non riguardo la teoria dietro i compilatori, quindi mi viene il dubbio, dato un puntatore a[] di un array di uint16, questo punterà al primo elemento, ma al byte piu significativo o a quello meno significativo?
Il mio approccio ovviamente lavorando su uC è quello di partire dal puntatore e avanzare con un semplice incremento sul puntatore e sul indirizzo della EEPROM, ma non riuscendo a reperire informazioni utili non posso andare avanti. Sinceramente a me sembra di ricordare che il puntatore punti al primo elemento in particolare al "lowbyte", facendo piu uno ci si sposta al "highbyte" e con un ulteriore piu uno ci si sposta al "lowbyte" del secondo elemento, ma vorrei una conferma.
Grazie

Ho abbozzato questo
Codice sorgente - presumibilmente C/C++

  1. template <typename T> void EEPROM::Read(uint16_t address, T array[], uint16_t n)
  2. {
  3.         if(n != 0)
  4.         {
  5.                 n *= sizeof(T);
  6.                 for(;n>0;n--)
  7.                 {
  8.                         *array = EEPROMRead(address);
  9.                         array++;
  10.                         address++;
  11.                 }
  12.         }      
  13. }


Ultima modifica effettuata da Roby94 il 18/10/2015 alle 19:23


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 21:59
Domenica, 18/10/2015
Dipende dall'architettura. Se big endian punti al byte più significativo, se little endian al byte meno significativo.

https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/end ...

Per sapere con certezza il tuo tipo di architettura, leggi il datasheet oppure esegui un programma come:

Codice sorgente - presumibilmente C/C++

  1. int main()
  2. {
  3.   int x = 1;
  4.  
  5.   char *y = (char*)&x;
  6.  
  7.   printf("%c\n",*y+48);
  8.  
  9.   // little endian = 1
  10.   // big endian = 0
  11. }





Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 10:51
Lunedì, 19/10/2015
Su AVR il debug è sempre più incasinato del problema xD.
Sono su architettura Harvard, mi sapresti dare indicazioni?
Grazie mille Piero.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 11:12
Lunedì, 19/10/2015
Harvard non ti dice big o small endian. Usa la porta seriale se sei su Arduino.  

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1127
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 18:19
Lunedì, 19/10/2015
Ok ho fatto il tuo test e se l'UART funziona correttamente allora il byte puntato è il LOW.
Grazie mille Piero.


La programmazione è arte... fa che i tuoi script siano degni di un museo.
PM Quote