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

www.allegristefano.eu

QR code automazione WEB

il dispositivo è composto da : microcontrollore con interfaccia ethernet lettore QR code display relè Il dispositivo si connette ad internet mediante interfaccia ethernet implementa un WEB client con crittografia

Convertitore USB fibra ottica compatibile con 902SD001R2001

Questo convertitore USB fibra ottica permette di aggiungere un collegamento in fibra ottica tramite l’USB 2.0 del tuo PC. Caratteristiche: • convertitore USB fibra ottica• Trasmissione dati Full-Duplex• Rate di trasmissione dati

Mini data logger/attuatore via SMS

UPR-GSM e’ un progetto del 2006, basato su un microcontrollore ARM7 e’ un controllore a distanza che permette mediante SMS di conoscere lo stato di ingressi digitali o analogici e attuare