Oppure

Loading
18/10/15 16:40
Roby94
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
template <typename T> void EEPROM::Read(uint16_t address, T array[], uint16_t n)
{
	if(n != 0)
	{
		n *= sizeof(T);
		for(;n>0;n--)
		{
			*array = EEPROMRead(address);
			array++;
			address++;
		}
	}	
}
Ultima modifica effettuata da Roby94 18/10/15 17:23
aaa
18/10/15 19:59
pierotofy
Dipende dall'architettura. Se big endian punti al byte più significativo, se little endian al byte meno significativo.

cs.umd.edu/class/sum2003/cmsc311/Notes/Data/…

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

int main()
{
  int x = 1;

  char *y = (char*)&x;

  printf("%c\n",*y+48); 

  // little endian = 1
  // big endian = 0
}


Il mio blog: piero.dev
19/10/15 8:51
Roby94
Su AVR il debug è sempre più incasinato del problema xD.
Sono su architettura Harvard, mi sapresti dare indicazioni?
Grazie mille Piero.
aaa
19/10/15 9:12
TheDarkJuster
Harvard non ti dice big o small endian. Usa la porta seriale se sei su Arduino.
aaa
19/10/15 16:19
Roby94
Ok ho fatto il tuo test e se l'UART funziona correttamente allora il byte puntato è il LOW.
Grazie mille Piero.
aaa