¿Utilizando EEPROM insted de flash en AVR?

0

Estoy escribiendo un programa AVR Mikrobasic en el que mi memoria flash Atmega32 está llena.

¿Puedo usar el espacio EEPROM para guardar las rutinas de mis funciones en lugar de la memoria flash para liberar espacio de memoria flash?

    
pregunta 1st

1 respuesta

1

No.

De la hoja de datos de Atmega328PB:

  

Para maximizar el rendimiento y el paralelismo, el AVR utiliza una arquitectura de Harvard, con memorias y buses separados para el programa y los datos. Las instrucciones en la memoria del programa se ejecutan con una canalización de un solo nivel. Mientras se está ejecutando una instrucción, la siguiente instrucción se obtiene de la memoria del programa. Este concepto permite ejecutar instrucciones en cada ciclo de reloj. La memoria del programa es una memoria flash reprogramable dentro del sistema.

(Énfasis mío)

La arquitectura de Harvard significa que la instrucción y el procesamiento de datos están separados dentro de la CPU. De Wikipedia:

  

La arquitectura de Harvard es una arquitectura de computadora con almacenamiento y vías de señal físicamente separados para instrucciones y datos.

Otra cita de la hoja de datos de Atmel328P, sección 11.1:

  

Esta sección describe los diferentes tipos de memoria en el dispositivo. La arquitectura AVR tiene dos espacios de memoria principales, la memoria de datos y el espacio de memoria de programa. Todos los espacios de memoria son lineales y regulares.

Eche un vistazo a este diagrama de bloques que se encuentra en la Hoja de datos de Atmel328PB :

Como puede ver, la memoria flash y el canal de instrucciones y la EEPROM están físicamente separados.

Aparte: mientras no se puede ejecutar un programa desde memorias que no sean flash, es posible cargar datos desde la memoria del programa usando la instrucción LPM que se encuentra en algunas plataformas AVR.

Referencia de la hoja de datos:

  

Las tablas de constantes se pueden asignar dentro de todo el espacio de direcciones de la memoria del programa, usando la instrucción Cargar memoria de programa (LPM).

    
respondido por el try-catch-finally

Lea otras preguntas en las etiquetas