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 Byte
Struttura.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).