Quiero emular la EEPROM sobre la flash del STM32F103. ¿Hay alguna manera de utilizar toda la flash libre en lugar de la única página? ¿Cómo puedo inicializar el punto de inicio de mi emulación de EEPROM para que sea después de todas las secciones? He tratado de añadir la sección después de .text como
.text: ...
.myvars :
{
. = ALIGN(1024);
KEEP(*(.myvars));
KEEP(*(.myvars*));
} > rom
y definir la variable como
__attribute__((section(".myvars"))) static const flash_storage Flash_Storage = {
.magick = "1234567890absdef0987654321",
.all_stored = USERCONF_INITIALIZER
};
pero no me ayuda: veo algunos datos más después de esta estructura en el volcado binario.
UPD La solución de este problema es bastante sencilla. La sección .myvars
debe estar después de la última sección de la rama, es decir después de .data
¡!
0 votos
Aquí hay un enlace a ST Emulación EEPROM por si no lo has visto. Puede haber ideas en su código fuente.
0 votos
@bitsmack, suena raro, pero no encuentro fuentes de la emulación EEPROM de ST. En el RM no hay nada sobre la estructura de la memoria.
0 votos
Su sitio web es muy extraño :). Aquí está el paquete de software para microcontroladores STM32F103/105.
0 votos
@bitsmack, ¡todo bien! Acabo de añadir la sección .myvars después de ¡sección .data y ahora todo bien! También tengo un error: STM32F103 tamaño de la página es de 1024 bytes, no 2048.
0 votos
¡Estupendo! Me alegra saber que ha funcionado :) En lugar de actualizar tu pregunta, ¡deberías añadir tu propia respuesta! Esto permitirá que la base de datos funcione correctamente, y también podemos darle upvotes. :)
0 votos
Pero quieres que vaya a .rom ¿estás seguro de que es ahí donde va?
0 votos
@TimWescott, sí, funciona tal y como quiero. Gcc poner sección dada después de todos los datos en flash (incluyendo inicializadores constantes).
0 votos
PARA SU INFORMACIÓN dos enfoques diferentes (el tercero no se aplica a STM32F1)