Autor Tema: STM32 - Escribir datos en posiciones de memoria  (Leído 1593 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17779
    • MicroPIC
STM32 - Escribir datos en posiciones de memoria
« 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
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado alogic.on

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 767
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #1 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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7894
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #2 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")))
  2.  
Y no estar poniendo las direcciones.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17779
    • MicroPIC
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #3 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
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #4 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17779
    • MicroPIC
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #5 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
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 102
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #6 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.
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 164
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #7 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 !

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 102
Re:STM32 - Escribir datos en posiciones de memoria
« Respuesta #8 en: 08 de Octubre de 2020, 19:52:45 »
Si ya logre definir una nueva área y crear nuevas secciones gracias a San Google.  :-/
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.


 

anything