Per poter accedere ai dati di una struttura un modo è quello di accedere ai singoli elementi della struttura, un’altro è quello di accedere all’area di memoria nella quale quell’elemento è memorizzato.
pragma pack(push,1) // definisce l'allineamento della compressione per //i membri della struttura a 1Byte// l'effetto è che non ci sono byte non
//utilizzati tra i vari campi della struttura e
//i dati salvaìti in memoria occupando la somma
//delle grandezze dei cami dichiarati nella
//struttura
typedef struct definizioneStruttura { float primo; // 4 byte float secondo; // 4byte int terzo; // 2byte } definizioneStruttura; pragma pack(pop) definizioneStruttura Struttura; int main(void) { unsigned int *pStruttura=&Struttura; // il puntatore è di tipo // unsigned int = 2 ByteStruttura.primo = 1.1;
Struttura.secondo = 2.2;
Struttura.terzo = 3; //inizializzazione valore ==> 3
*(pStruttura+4) = 0x0400; // per scorrere i campi della
//struttura ci si sposta sommando
//4 al puntatore alla struttura
// per avanzare di 4 volte la
// dimensione del puntatore alla
//struttura, sommando 2 si
//punterebbe a "Struttura.secondo"
Printf("valore terzo %d", Struttura.terzo);
} // stamperà il valore ==> 4
per MSP430 la memorie viene indirizzata con 2 byte è quindi possibile definire un puntatore di tipo unsigned int e assegnare a questo il valore di primo elemento di memoria della struttura
unsigned int *pStruttura=&Struttura; // il puntatore è di tipo // unsigned int = 2 Byte
&Struttura
il carattere speciale & consente di recuperare l’indirizzo di memoria della Struttura
per accedere al contenuto della struttura si fa avanzare il puntatore a step di 2 byte alla volta (questo perchè il puntatore è definito come unsigned int == 2byte)
*(pStruttura+4) = 0x0400; // per scorrere i campi della
//struttura ci si sposta sommando
//4 al puntatore alla struttura
// per avanzare di 4 volte la
// dimensione del puntatore alla
//struttura
per modificare il valore di Struttura.terzo è necessario tenere in considerazione l’ordine dei byte che nel caso dell’MSP430 è
little endian = indirizzo più piccolo contiene il byte meno significativo
Ordine dei byte (endianness)
L’ordine dei byte (conosciuto anche come big-endian, little-endian o middle-endian a seconda dei metodi differenti), in informatica, indica modalità differenti usate dai calcolatori per immagazzinare in memoria dati di dimensione superiore al byte (es. word, dword, qword).