Creo que esto está más relacionado con GCC que con ESP8266. He estado tratando de poner una variable constante en la sección de memoria de solo lectura de ESP. La idea es cambiar el valor directamente en la imagen binaria antes de actualizarlo en un nuevo chip. En la sección de código, he añadido,
const uint32_t device_address __attribute__((section(".device_addr"))) = 0x12345678;
Los cambios en el script del vinculador en program.ld son; creó una nueva región de memoria
device_addr_section : org = 0x40202100, len = 0x04
En la región SECCIONES, se agregó una nueva sección
.addr_section: ALIGN(4)
{
KEEP(*(.device_addr))
} >device_addr_section
Cuando compilo el código con el nuevo enlazador, veo los cambios y la asignación en el archivo de mapa, pero no puedo encontrar el valor hexadecimal 0x12345678 en la imagen binaria generada. Cuando elimino el atributo de la variable device_address, veo ese valor hexadecimal en la imagen binaria generada. El desglose de la región de memoria completa:
MEMORY
{
dport0_0_seg : org = 0x3FF00000, len = 0x10
dram0_0_seg : org = 0x3FFE8000, len = 0x14000
iram1_0_seg : org = 0x40100000, len = 0x08000
/* irom0 section, mapped from SPI flash
- Origin is offset by 0x2010 to create spacer for second stage bootloader image,
header.
- Length is max 8Mbit of mappable flash, minus start offset
*/
irom0_0_seg : org = 0x40202010, len = (1M - 0x2020)
device_addr_seg (rx): org = 0x40202100, len = 0x04
}
No he usado GCC en el pasado, se agradecería cualquier idea y ayuda.
Gracias, Nishant