MCU: guardar datos directamente en flash. ¿Cuál es la ventaja?

4

Sé que en algunas MCU es posible guardar datos directamente en la memoria del programa (memoria flash). El compilador AVRGCC usa "PROGMEM" keyworkd, MPLAB C18 usa uno similar con el mismo efecto. Sin embargo, ¿cuál es la ventaja de tener datos en la memoria del programa?

¿Tal vez porque esos MCU tienen una arquitectura de Harvard y, por lo tanto, leer datos de la memoria del programa es más rápido que leerlos desde la memoria de datos? ¿Es "realmente mucho más rápido" que vale la pena usarlo?

¡Gracias!

    
pregunta msr

3 respuestas

7

Estos microcontroladores tienen una memoria RAM muy limitada. Entonces, si desea una tabla de consulta, tiene sentido almacenar los datos grandes y constantes en el programa flash en lugar de la preciosa memoria RAM.

    
respondido por el Robert
5

Tienes dos opciones para datos constantes en estos microcontroladores flash.

  1. Cargar desde flash cuando sea necesario (PROGMEM)
  2. Cargar desde flash en ram en el inicio del programa (no PROGMEM). El compilador de C hace esto por usted automáticamente si olvida usar PROGMEM porque los datos normalmente se leen / escriben en C.

La carga de datos desde la memoria del programa es mucho más lenta que la carga desde la memoria RAM, pero cuando solo tienes 128 bytes de memoria RAM, y la información debe almacenarse en la memoria flash de todos modos, vale la pena.

Los AVR también tienden a tener, por ejemplo, 128 bytes de EEPROM, y cualquier memoria flash que no necesite para su programa. El microcontrolador puede entonces programar su propia memoria flash para guardar medidas y configuraciones. La memoria flash es más abundante que la EEPROM pero, a diferencia de la EEPROM, que normalmente parece ser regrabable 1 byte a la vez, el Flash debe borrarse y reescribirse en bloques.

    
respondido por el joeforker
4

Si una MCU no tiene un área EEPROM separada para guardar datos, entonces sí, puede guardar datos persistentes en un área de la memoria flash no utilizada por el código de programa. Esto solo es bueno para los datos que se actualizan con poca frecuencia (como los datos de configuración o las preferencias del usuario), ya que hay un límite en el número de veces que puede volver a escribir el flash (normalmente un mínimo de 10,000 ciclos de borrado / escritura). La ventaja de guardar datos de esta manera es que no se perderá cuando la MCU pierda energía. Sin algún tipo de almacenamiento no volátil, tendría que tener una memoria RAM con respaldo de batería para guardar los datos durante el apagado de la alimentación.

La segunda razón para permitir que un programa escriba en la memoria flash es que permite que los programas se actualicen de forma remota en el campo. Para hacer esto, necesita que una parte del programa sea residente todo el tiempo (la parte que escribirá el nuevo código en la parte actualizable de la memoria flash) y un medio para descargar el código actualizado (por ejemplo, Bluetooth, teléfono celular). , etc.). Desea asegurarse de que la parte del código que siempre reside en el sitio esté lo más libre de errores posible, ya que es más difícil actualizarlo.

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas