TODOPIC

Otros Microcontroladores / Dispositivos programables => Microcontroladores ARM => Mensaje iniciado por: Nocturno en 23 de Enero de 2019, 13:54:38

Título: STM32 - Escribir datos en posiciones de memoria
Publicado por: Nocturno en 23 de Enero de 2019, 13:54:38
Hola compañeros.

Estoy haciendo un software para STM32F103 y voy a usar parte de la memoria de programa como memoria EEPROM, para almacenar datos no volatiles.

La dirección a partir de la cual emulo una EEPROM es esta:
#define EEPROM_START_ADDRESS   ((uint32_t)0x0803FFE0)

Me gustaría que al compilar el programa, en esa dirección apareciesen unos datos por defecto. ¿Cómo puedo hacerlo?

Gracias
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: alogic.on en 24 de Enero de 2019, 22:45:36
hola señor. mucho tiempo sin leerte. si tu preguntas eso.... pa mi que va a estar dificil. algo como EEPROM.write(ee++, *p++) no??
 al abrir en atollic, o no se que, me habre u sin fin de librerias. gpio, adc ...... tu sabes mejor. pero no he visto ninguna que nombre la eeprom. perdona lo intento pero ando un poco perdío. te dejo en los adjuntos la carpeta con los inc que vienen a ver si te sirve pero me parece que no hay nada.
también he visto alguna web que ponia, o que se quejaban de la libreria o no se que. y usan la flash como eeprom http://micromouseusa.com/?p=606 aqui una libreria eeprom_flash https://platformio.org/lib/show/2285/eeprom_flash

un saludo
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: KILLERJC en 24 de Enero de 2019, 23:14:06
Lo que preguntas depende del compilador.. Es imposible hacer una busqueda para ayudarte sin saber el compilador que estas usando.

Pero si es basado en gcc, Creo que podrias hacerlo:

Código: C
  1. const uint32_t nombre_de_variable __attribute__((at(0x0803FFE0))) = 10; /* En las FLASH */

no lo probe... Pero es una de las formas que se me ocurren para eso.. La otra es modificar el archivo del linker y crear una seccion de variables.. Achicando la FLASH, de esa forma al declarar las variables poder asiganarlas a esa seccion con:

Código: C
  1. __attribute__((section("name")))
Y no estar poniendo las direcciones.
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: Nocturno en 25 de Enero de 2019, 01:59:50
Gracias por vuestras respuestas, amigos.

Killer, el compilador que uso es GCC sobre Atollic True Studio.

He probado lo que indicas, y me sale este warning:
Código: [Seleccionar]
'at' attribute directive ignored
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: planeta9999 en 25 de Enero de 2019, 02:06:26
 
Mira aquí:
https://mcuoneclipse.com/2012/11/01/defining-variables-at-absolute-addresses-with-gcc/


Yo eso lo hice hace años, pero para PIC32, de esta manera en el fuente en C:

unsigned int __attribute__ ((space(prog), address(0x9D005010))) Reservada_1 = 0xFFFFFFFF; // Direccion reservada
unsigned int __attribute__ ((space(prog), address(0x9D005014))) Reservada_2 = 0xFFFFFFFF; // Direccion reservada
unsigned int __attribute__ ((space(prog), address(0x9D005018))) Reservada_3 = 0xFFFFFFFF; // Direccion reservada
unsigned int __attribute__ ((space(prog), address(0x9D00501C))) Reservada_4 = 0xFFFFFFFF; // Direccion reservada
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: Nocturno en 25 de Enero de 2019, 02:38:33
Genial, ya lo he conseguido.

En el código:
Código: [Seleccionar]
const unsigned char __attribute__((section (".EEPROM"))) buf[32]="MANOLO";
Y en el Linker Script:
Código: [Seleccionar]
  .myBufBlock 0x0803FFE0 :
  {
    KEEP(*(.EEPROM)) /* keep my variable even if not referenced */
  } > m_data


Muchas gracias por vuestra ayuda
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: Carlos2302 en 07 de Octubre de 2020, 21:50:09
Hola Nocturno, saludos desde mi amada Venezuela, mira sera que me puedes dar una manita sobre como crear el archivo linker para poder tambien guardar datos como eeprom en un stm32 uso el Blue Pill, gracias y espero su pronta respuesta me despido deseando que te encuentres bien.
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: AccioRw en 08 de Octubre de 2020, 15:55:30
Hola Carlos, se refiere a los archivos *.ld que te creará en el caso de STM32 tras haber creado un proyecto con el configurador CubeMX.
Abrelos y verás lineas similares a las que te ha dejado Nocturno que debes meter en el Linker Script, asi que en respuesta a tu comentario para crear el archivo debes crear el proyecto y solo el generador de codigo te lo hará.
Un Saludo !
Título: Re:STM32 - Escribir datos en posiciones de memoria
Publicado por: Carlos2302 en 08 de Octubre de 2020, 19:52:45
Si ya logre definir una nueva área y crear nuevas secciones gracias a San Google.  :-/