Ciao a tutti.
Forse mi sono spiegato male.
Il codice purtroppo non lo posso condividere ma provo a fare degli esempi.
Attualmente il codice ha un file di configurazione “conf.h” dove ci sono tutte queste #define che vengono poi usate in più parti del codice, sia livello funzionale, nelle espessioni, nei confronti, ma anche per inizializzare altre strutture del tipo:
tx =
{
.param_1 = DEFINE_1
.param_2 = DEFINE_2
}
Strutture che si trovano in dei file sorgenti .c che includono l'attuale “conf.h”
Ora si vule che queste #define derivino da una memoria esterna in caso di software rilasciato, mentre nel sw di debug i valori devono rimanere modificabili a mano da codice. Per cui il SW di rilascio deve prendere questi valori da una memoria i cui indirizzi sono noti e sono sempre quelli.
Come dicevo prima, la soluzione di trasformare, per sempio:
#define DEFINE_1 10
in
#define DEFINE_1 *(uint32_t *)0xA000
aggiungendo uno switch di compilazione per selezionare la configurazione di debug da quella di rilascio, funziona perfettamente, ma non ha convinto. Sul motivo posso solo aggiungere che le decisioni non le prendo io. Stessa storia per la routine in fase di inizializzazione: funziona perfettamente, ma le decisioni non le prendo io.
L'unica soluzione che ho trovato è stata quella di creare un conf.c che insieme al conf.h forma un nuovo modulo SW dove ho, per esempio:
typedef struct =
{
uint32_t DEFINE_1
uint32_t DEFINE_2
} conf_t;
nel .h e nel .c ho la globale:
const conf_t Gv_conf;
che se siamo in SW di rilascio, viene mappata con l'indirizzo della memoria (anche questo metodo funziona), mentre in caso contrario, con uno switch, ho la struttura inzializzata sul codice, per esempio:
Gv_conf = { .DEFINE_1 = 10, .DEFINE_2 = 11 };
questo ovviamente implica che il codice va modificato ovunque vengano usate le #define.
In questo caso il codice funziona, ad eccezione di quelle #define che a loro volta inizializzano strutture del tipo:
tx =
{
.param_1 = DEFINE_1
.param_2 = DEFINE_2
}
Per queste giustamente il compilatore mi fa una pernacchina.
Quindi stavo cercando una soluzione che potesse funzionare per tutto.
Mi spiace non poter condividere di più, ma spero sia più chiaro.
Grazie