Intenta comprender el código de forma correcta previamente a aplicarlo a tu trabajo si tdeseas aportar algo puedes dejarlo en la sección de comentarios.
Solución:
Hoy en día, la memoria Flash se usa para almacenar el código del programa, y la EEPROM (memoria de solo lectura borrable eléctricamente) se usa para almacenar datos persistentes. Hace unos 30 años, antes de que apareciera Flash, las EEPROM se usaban para almacenar el código del programa.
En realidad, la ROM (memoria de solo lectura) fue lo primero, luego la PROM (ROM programable, solo una vez), la EPROM (PROM borrable con luz ultravioleta), la EEPROM y finalmente la memoria flash. Las ROM todavía se utilizan para aplicaciones de bajo costo y gran volumen (por ejemplo, tarjetas de felicitación parlantes).
La diferencia importante con los microcontroladores actuales es que, por lo general, no se puede ejecutar código fuera de la EEPROM, y es complicado que los programas almacenen datos en flash. (Los datos se almacenan en flash cuando, por ejemplo, utiliza la palabra clave “const” en una declaración de datos, o define un string, pero eso lo maneja el compilador y el enlazador entre bastidores).
El área de EEPROM se puede usar para almacenar la configuración u otros datos que desea que estén disponibles durante los reinicios, incluso si el microcontrolador se ha quedado sin energía y luego se vuelve a encender. Funcionalmente, puede pensar en la EEPROM como un disco duro muy pequeño o una tarjeta SD.
En los microcontroladores sin EEPROM, es posible almacenar datos persistentes en la memoria flash, pero esto se vuelve difícil ya que los microcontroladores no fueron realmente diseñados para esto, y debe encontrar un lugar especial que no interfiera con el código del programa y dejarlo a un lado. con el enlazador. Además, como se menciona a continuación, generalmente puede actualizar la EEPROM muchas veces más que la memoria flash.
Si programa datos en flash, esto no significa que pueda acceder a los datos como variables en su programa C, porque no hay forma de decirle al compilador dónde están estas variables en su código (es decir, no puede vincular una const variable a esta área de flash). Por lo tanto, la lectura debe realizarse a través del conjunto especial de registros que se utilizan para escribirlos. Tenga en cuenta que esta restricción también se aplica a los datos en EEPROM, por lo que no tiene ninguna ventaja en este sentido.
Para programar flash o EEPROM, primero se debe borrar un bloque de memoria. Entonces se programa. Para flash, la escritura generalmente también se realiza bloque a bloque. Para las EEPROM, se puede hacer por bloques o un byte a la vez, dependiendo del microcontrolador.
Tanto para flash como para EEPROM, hay un número máximo de veces que puede actualizarlos antes de que se agote la memoria. Este número se da en la hoja de datos como un mínimo valor garantizado. Por lo general, es mucho más alto para las EEPROM que para la memoria flash. Para flash, he visto números tan bajos como 1000. Para EEPROM, he visto números tan altos como 1,000,000.
Una ventaja de las EEPROM sobre la memoria flash es que puede borrarlas muchas más veces de las que puede borrar la memoria flash.
“Autoprogramable en el sistema” simplemente significa que el microcontrolador puede actualizar su propio flash mientras se ejecuta. La función generalmente se usa para actualizar el código en el campo. El truco es que debe dejar algo de código en el sistema mientras se actualiza el programa principal, llamado gestor de arranque. Este esquema se utiliza en el sistema Arduino para programar el chip.
Agregaré más información a la excelente respuesta de @tcrosley.
El ATmega16 implementa una arquitectura Harvard, es decir, una topología de sistema donde la memoria de datos está separada de la memoria del programa. Citando el párrafo relevante de la hoja de datos de Atmega16 (página 8):
Para maximizar el rendimiento y el paralelismo, el AVR utiliza una arquitectura Harvard, con memorias y buses separados para programas y datos. Las instrucciones en la memoria del programa se ejecutan con una canalización de un solo nivel. Mientras se ejecuta una instrucción, la siguiente instrucción se obtiene previamente de la memoria del programa. Este concepto permite ejecutar instrucciones en cada ciclo de reloj. La memoria del programa es una memoria Flash reprogramable en el sistema.
La arquitectura de Harvard tiene la ventaja de no tener contención de bus entre los ciclos de obtención de instrucciones y los ciclos de acceso a datos, ya que los datos y las instrucciones no comparten el mismo bus, como en la arquitectura de PC convencional.
Por lo tanto, la memoria flash se usa como memoria de programa, mientras que la memoria de datos se divide entre SRAM (para datos transitorios, como la pila de llamadas a funciones y el montón, si está programando en C, por ejemplo) y la EEPROM (para almacenamiento permanente) .
valoraciones y comentarios
Te invitamos a añadir valor a nuestro contenido participando con tu veteranía en las acotaciones.