- Messaggi: 22
- Ringraziamenti ricevuti 6
Allineamento di una struttura
6 Anni 10 Mesi 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
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
- Autore della discussione
- Junior Member
Riduci
Di più
6 Anni 10 Mesi 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
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.
6 Anni 10 Mesi fa #3
da Pascolo
Risposta da Pascolo al topic Allineamento di una struttura
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Pascolo
- Autore della discussione
- Junior Member
Riduci
Di più
- Messaggi: 22
- Ringraziamenti ricevuti 6
6 Anni 10 Mesi 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
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.
6 Anni 10 Mesi fa #5
da Cosimix
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.
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
- Elite Member
Riduci
Di più
- Messaggi: 198
- Ringraziamenti ricevuti 26
Moderatori: Mauro Laurenti, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Login
© LaurTec 2006 - 2024