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

Lascia un commento

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

Related Post

256 IO in 56x56mm

La scheda 256IO è parte di un assieme compatto denominato TILE ed indicato in figura seguente. La scheda costituisce l’ultimo strato in basso; i rimanenti strati sono composti da componentistica

Seriale over TCP/IP con modulo Telit GM-863-PY

Il dispositivo consente di connettere una linea di comunicazione seriale RS232 remota al PC sfruttando la connettività internet del PC e la connessione GPRS del modulo GM-863-PY. Il modem GM-863 è

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