MSP430 – Puntatori a struttura ANSI C

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-endianlittle-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. worddwordqword).

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Related Post

LoRaWAN sistema radio lunga portata a basso consumo

Dispositivo alimentato con batteria al litio con autonomia di due anni e che comunica via radio fino a 100Km di distanza ad un costo di produzione inferiore ai 20€. Il dispositivo serve per rendere disponibili

STMCubeIDE – Come abilitare printf via SWD

In CubeMX abilita il debug via serial wire Nel main.c aggiungi : Nel menù di configurazione del debugger scegli il debug Sempre nel menù di configurazione del debugger scegli Verifica

Sensore Umidità e Temperatura – SHT15 –

un microcontrollore Atmel con architettura a 16bit che ha al suo interno 512byte di EEPROM, ciò al fine di assolvere alla funzione della lettura dei valori di umidità e temperatura