- Messaggi: 43
- Ringraziamenti ricevuti 0
Scelta indirizzo per salvataggio su flash NVM
1 Anno 6 Mesi fa - 1 Anno 6 Mesi fa #1
da Elby
Scelta indirizzo per salvataggio su flash NVM è stato creato da Elby
In un progetto sto utilizzando il pic16f18344 che prevede una memoria di 4096 devo salvare alcuni dati nella memoria flash e mi trovo in grande difficoltà a capire quali celle utilizzare.
Compilando il mio programma (senza disabilitare le ottimizzazioni) arrivo ad avere come programma utilizzato 3380 (0xD34).
Teoricamente avrei dovuto avere le celle da 0xD35 fino a 0xFFF tutte con il valore di cella libera 0x3FFF eppure quando vado a controllare la struttura del Program Memory ritrovo questa organizzazione:
da 0x000 a 0x7FF parte del programma
da 0x800 a 0xAC7 celle con valore 0x3FFF e DisAssy MOVWI [-1] FSR1
da 0xAC8 a 0xFFF la restante parte del programma
Devo salvare in tutto solo sette dati eppure sto avendo non pochi problemi a capire quali sono le celle realmente libere.
Giusto come ulteriore esempio, su un altro progetto in cui utilizzo lo stesso processore ho questi dati:
memoria utilizzata post compilazione:
3018 (0xBCA)
organizzazione memoria:
0x000 - 0x80F programma
0x810 - 0xC41 celle 0x3FFF
0xC42- 0xFFF programma
Ringrazio chiunque potrà darmi un chiarimento a riguardo
Compilando il mio programma (senza disabilitare le ottimizzazioni) arrivo ad avere come programma utilizzato 3380 (0xD34).
Teoricamente avrei dovuto avere le celle da 0xD35 fino a 0xFFF tutte con il valore di cella libera 0x3FFF eppure quando vado a controllare la struttura del Program Memory ritrovo questa organizzazione:
da 0x000 a 0x7FF parte del programma
da 0x800 a 0xAC7 celle con valore 0x3FFF e DisAssy MOVWI [-1] FSR1
da 0xAC8 a 0xFFF la restante parte del programma
Devo salvare in tutto solo sette dati eppure sto avendo non pochi problemi a capire quali sono le celle realmente libere.
Giusto come ulteriore esempio, su un altro progetto in cui utilizzo lo stesso processore ho questi dati:
memoria utilizzata post compilazione:
3018 (0xBCA)
organizzazione memoria:
0x000 - 0x80F programma
0x810 - 0xC41 celle 0x3FFF
0xC42- 0xFFF programma
Ringrazio chiunque potrà darmi un chiarimento a riguardo
Ultima Modifica 1 Anno 6 Mesi fa da Elby. Motivo: Non era chiaro l'argomento della domanda. Ho problemi a scegliere la cella della flash dove memorizzare delle informazioni
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Elby
- Autore della discussione
- Senior Member
Riduci
Di più
1 Anno 6 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Scelta indirizzo per salvataggio su flash NVM
Salve Elby,
questo compito in generale viene lasciato al compilatore per variabili const che vanno in memoria NVM (nel caso tu voglia solo leggere).
volendo usare la memoria NVM devi in generale assegnare una pagina (qualora tu voglia leggere e scrivere).
Per evitare che il compilatore metta del codice nella pagina di tuo interesse, che poi potresti accedere dal programma, devi modificare il file di linker.
indirettamente puoi farlo anche come pagina 7 della seguente documentazione:
www.laurtec.it/progetti-elettronici/soft...tboot-mcu-bootloader
Il range specificato non viene usato per il codice.
Saluti,
Mauro
questo compito in generale viene lasciato al compilatore per variabili const che vanno in memoria NVM (nel caso tu voglia solo leggere).
volendo usare la memoria NVM devi in generale assegnare una pagina (qualora tu voglia leggere e scrivere).
Per evitare che il compilatore metta del codice nella pagina di tuo interesse, che poi potresti accedere dal programma, devi modificare il file di linker.
indirettamente puoi farlo anche come pagina 7 della seguente documentazione:
www.laurtec.it/progetti-elettronici/soft...tboot-mcu-bootloader
Il range specificato non viene usato per il codice.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
1 Anno 6 Mesi fa #3
da Elby
Risposta da Elby al topic Scelta indirizzo per salvataggio su flash NVM
Innanzitutto grazie per la risposta.
Capisco che decidere le celle per il salvataggio dei dati nella flash è un lavoro che va previsto a monte e si fa quindi riservare delle celle dalla compilazione del programma.
Tuttavia mi chiedevo, una volta terminato il firmware e controllato nel program memory dove è il programma e quali sono le celle libere, se è possibile decidere allora le allocazioni per la memorizzazione.
Faccio un esempio,
Nel Program Memory trovo:
da 0x000 a 0x7FF prima parte del programma
da 0x800 a 0xAC7 celle libere con valore 0x3FFF
da 0xAC8 a 0xFFF restante parte del programma
Se in queste condizioni durante l'esecuzione del programma memorizzo nelle celle da 0xA00 a 0xA09 non dovrei incorrere in nessun problema o sbaglio ?
Nel senso che una volta rimaste libere le celle non dovrebbero piú essere scritte in nessun altro modo durante l'esecuzione del firmware....oppure ho capito male ?
Capisco che decidere le celle per il salvataggio dei dati nella flash è un lavoro che va previsto a monte e si fa quindi riservare delle celle dalla compilazione del programma.
Tuttavia mi chiedevo, una volta terminato il firmware e controllato nel program memory dove è il programma e quali sono le celle libere, se è possibile decidere allora le allocazioni per la memorizzazione.
Faccio un esempio,
Nel Program Memory trovo:
da 0x000 a 0x7FF prima parte del programma
da 0x800 a 0xAC7 celle libere con valore 0x3FFF
da 0xAC8 a 0xFFF restante parte del programma
Se in queste condizioni durante l'esecuzione del programma memorizzo nelle celle da 0xA00 a 0xA09 non dovrei incorrere in nessun problema o sbaglio ?
Nel senso che una volta rimaste libere le celle non dovrebbero piú essere scritte in nessun altro modo durante l'esecuzione del firmware....oppure ho capito male ?
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Elby
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 43
- Ringraziamenti ricevuti 0
1 Anno 6 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Scelta indirizzo per salvataggio su flash NVM
Compilazioni diverse possono posizionare il codice in posizioni diverse, per cui non puoi in usare una zona apparentemente non usata. Le posizione sono però compatibili con il file liker per la zona programma.
Potresti realizzare un array di X byte e usare l'indirizzo di inizio dello stesso per localizzare la memoria.
La variabile deve essere di tipo const al fine di andare in memoria flash.
Per esempio
const char blocco_memoria[32] = { ....inizializzazione};
Ma il modo pulito è bloccare un'area di memoria tramite il linker, allo stesso modo di come si fa per il bootloader. Quella zona diventa vietata e puoi usarla tranquillamente.
Saluti,
Mauro
Potresti realizzare un array di X byte e usare l'indirizzo di inizio dello stesso per localizzare la memoria.
La variabile deve essere di tipo const al fine di andare in memoria flash.
Per esempio
const char blocco_memoria[32] = { ....inizializzazione};
Ma il modo pulito è bloccare un'area di memoria tramite il linker, allo stesso modo di come si fa per il bootloader. Quella zona diventa vietata e puoi usarla tranquillamente.
Saluti,
Mauro
Si prega Accedi o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.