Allineamento di una struttura

6 Anni 1 Mese fa #1 da Pascolo
Allineamento di una struttura è stato creato da Pascolo
Salve ragazzi,
ho iniziato ad utilizzare un PIC24 e faccio fatica a capire il concetto di allineamento dei dati in una struttura.
La mia struttura la utilizzo per metterci dei parametri che poi memorizzo su una EEPROM esterna. I dati sono un mix di 8, 16, 32bit.
Pensavo di risolvere tutto con "__attribute__ ((packed))" ma non è proprio così.
Ho aggiunto delle variabili di riempimento, sembra funzionare, ma dal forum di Microchip mi dicono che non ho ben chiaro il concetto di allineamento.
Qualcuno mi può aiutare?

Grazie
Ivan

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Pascolo
  • Junior Member
  • Junior Member
Di più
6 Anni 1 Mese fa #2 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Allineamento di una struttura
Salve Ivan,

puoi postare il link che hai postato sul Forum Microchip?

Onestamente non sono un fanatico delle funzioni definite dal compilatore, visto che il tuo codice diventa non portabile e non sai cosa faccia il compilatore (a meno di vedere il codice assembly).

Saluti,

Mauro

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
6 Anni 1 Mese fa #3 da Pascolo
Risposta da Pascolo al topic Allineamento di una struttura
Ciao Mauro,
di seguito il link dal forum Microchip.

www.microchip.com/forums/m1036239.aspx

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Pascolo
  • Junior Member
  • Junior Member
Di più
6 Anni 1 Mese fa #4 da Mauro Laurenti
Risposta da Mauro Laurenti al topic Allineamento di una struttura
Ok, capisco il punto.

Quando ordinando le variabili in maniera diversa le cose funzionano, direi che non è la soluzione giusta, visto che lasci al compilatore il compito di farti funzionare il programma. Se dovessero cambiare qualche cosa alla prossima versione del compilatore, magari devi ordinare i dati in maniera diversa.

In ogni modo la problematica sta semplicemente nel fatto che la memoria viene letta a 16 bit (2 byte) per cui se la tua struttura formalmente richiede 5 byte viene organizzata in maniera da rientrare sempre in multipli di 16. Il compilatore come hai visto a seconda di come organizza il tutto potrebbe o meno dare il valore che ti aspetti (quando usi sizeof).

Per memorizzare la struttura in EEPROM puoi accedere le singole variabili e salvare i dati di cui hai bisogno.
In questo modo tu hai il controllo sui byte e non il compilatore. Il tuo programma funzionerà poi sui PIC24 o altro.
Se fai affidamento al compilatore e alle funzioni inline sei legato al compilatore e alla versione dello stesso.

Parafrasando...l'allineamento
Se un pacchetto di caramelle ha 10 caramelle, ma ne vuoi 15, devi comprare 2 pacchetti.
Se conti poi le caramelle che hai intasca non ne hai 15 come pensavi, ma 20.

Saluti,

Mauro
Ringraziano per il messaggio: Pascolo

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
6 Anni 1 Mese fa #5 da Cosimix
Risposta da Cosimix al topic Allineamento di una struttura

Rendering Error in layout Message/Item: array_keys(): Argument #1 ($array) must be of type array, null given. Please enable debug mode for more information.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • Cosimix
  • Avatar di Cosimix
  • Elite Member
  • Elite Member
Di più
Moderatori: Mauro LaurentiMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Login