Usando PIC32 Flash para almacenamiento

1

Continuando con mi aventura PIC32 y usando mi PIC32MX210F016B. Tengo algunos datos de configuración para otro IC que tengo que programar sobre SPI. Quiero almacenar esos datos de confurgación, aproximadamente 2K en el flash PIC. Aunque no tengo que aclarar cómo hacerlo. Estaba tratando de encontrar alguna documentación o ejemplo al respecto.

En TI land para un MSP430, recuerdo que tuve que especificar la página flash que iba a usar en el mapa de memoria y luego CC Studio seguía borrándola cada vez que volvía a cargar el código.

Siento que ya que esto es estático, tal vez pueda declararlo en mi código, simplemente no quiero que termine tratando de ocupar 2k de ram.

¿Algún consejo o referencia sobre la mejor manera de lograr esto?

    
pregunta confused

3 respuestas

4

Puede declarar sus datos en su código usando la clase de almacenamiento 'const' para decirle al compilador que coloque la variable en flash en lugar de RAM.

Entonces algo como:

const char array_of_stuff[2048] = {0, 1, 2, 3, 4, 5, ... , 2047};

o incluso

const struct {
   int   thing0,
         thing1;
   char  smaller_thing,
         lots_of_little_things[512];
  etc ...
 } interesting_stuff = {
   123,
   456,
   'p',
   {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd', .... },
   etc ...
 };

o, si sus datos se almacenan en algo parecido a un archivo .csv externo

const char my_data[2048] = {
#include "my_data.csv"
};

Al principio, dejar de lado la palabra clave 'const' parece producir el mismo efecto, pero de hecho, lo que tendrás es un área grande de RAM inicializada que el compilador ordenará que haya completado todas tus cosas al inicio en lugar de ubicar su (s) variable (s) en flash 'directamente'.

    
respondido por el brhans
3

Si desea manipular el Flash en su programa, hay dos cosas que puede considerar que podrían ayudarlo. Ambos son parte del proyecto chipKIT: hay una "Emulación EEPROM" (emulación de la biblioteca Arduino EEPROM que utiliza Flash).

enlace

Se basa en una sección de Flash que se reserva en el script del vinculador (los scripts del vinculador están en enlace ) y también utiliza una forma de nivelación de desgaste para aumentar la vida útil de tu flash.

En segundo lugar, para la lectura y escritura general en Flash, hay otra biblioteca para el proyecto chipKIT (escrita por mí): enlace

Siéntase libre de tomar cualquier código que desee.

Si no va a realizar ningún cambio en los datos, y está bien incluirlo en el código, declararlo const es el camino a seguir. Cuando const residirá en Flash (más específicamente en la sección .rodata ), por lo que no ocupará espacio en la RAM.

A diferencia de las MCU más simples, el PIC32 tiene un solo espacio de direcciones monolíticas, y Flash se asigna directamente a ese espacio de direcciones de memoria de 4 MB. Por consiguiente, se puede acceder directamente a los datos en Flash y no se requieren manipulaciones ni instrucciones de registro especiales. Las MCU más simples a menudo copian los datos Flash de solo lectura en la RAM para facilitar el acceso (a menos que específicamente lo obligues a hacerlo).

    
respondido por el Majenko
1

Microchip tiene una biblioteca de emulación EEPROM para PIC32 que debería hacer exactamente lo que necesita. enlace

"const" solucionará el problema, creo, siempre y cuando no necesites cambiar los datos mientras se está ejecutando, pero la emulación de EEPROM debería hacer todos los trucos

(No he usado el método yo mismo, así que no puedo responder por él)

    
respondido por el Scott Seidman

Lea otras preguntas en las etiquetas