Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Copia di array
Forum - C/C++ - Copia di array

Avatar
Roby94 (Member)
Guru


Messaggi: 1170
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
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
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. }





Il mio blog: https://piero.dev
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
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.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
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: 1170
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.

PM Quote