Scelta indirizzo per salvataggio su flash NVM

10 Mesi 2 Settimane fa - 10 Mesi 1 Settimana fa #1 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
Ultima Modifica 10 Mesi 1 Settimana 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
  • Senior Member
  • Senior Member
Di più
10 Mesi 1 Settimana 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

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
10 Mesi 1 Settimana fa #3 da Elby
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 ?

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

  • Elby
  • Senior Member
  • Senior Member
Di più
10 Mesi 1 Settimana 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

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

  • Mauro Laurenti
  • Avatar di Mauro Laurenti
  • Moderator
  • Moderator
Di più
Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

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

Registrati al sito LaurTec.

Login