protected_reg : ORIGIN = 0x9FC14000, LENGTH = 0x20000-0x14000
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x480
kseg1_boot_mem_4B0 : ORIGIN = 0xBFC004B0, LENGTH = 0x1000 - 0x4B0
espacio_preservado (rw) : ORIGIN = 0x9D0FEFC0, LENGTH = 0x1040
¿Puede ser que cuando quemaste el boltloader hayas configurado write protect en regiones que afectan a ese rango vía fuses?
Un define... y considerarlo una constante en memoria.... esta lejos de lo que es correcto.¿Cómo? :shock:
Perdon.. no vi que antes lo definias como:
const char __attribute__((space(prog), address(FLASH_END_ADDRESS))) nombreObjeto[] = clientcredentialIOT_THING_NAME;
Lo dije por que un define es simplemente una directiva de pre-procesamiento, por lo cual se ejecuta antes de cualquier compilación reemplazando lo anterior por lo siguiente:
const char __attribute__((space(prog), address(FLASH_END_ADDRESS))) nombreObjeto[] = "W00001";
Y recién ahí compilarlo. Y ahora si ocupa un espacio físico.
Despues modifique el comentario para decir que seguramente no estes usando esa constante, y por lo tanto el compilador la esta quitando de la memoria, porque no tiene sentido mantenerla.
Probaste agregando el modificador "volatile" a tu variable?
En realidad volatile fuerza al compilador a buscar la variable siempre que sea necesario porque puede cambiar...
Entonces volatile const no tiene sentido...
Pero... Tambien logramos con ese volatile evitar el optimizador, que si encuentra una variable que nunca va a ser llamada, la elimina.
La idea del volatile era eso... ver si era el optimizador quien estaba quitando esas variables y no destildar "Remove Unused parts" que es mas general.