Un microcontrolador puede tener diferentes tipos de memoria que sirven para diferentes propósitos. Iré a través de todos para resaltar las diferencias.
La memoria del programa regular es donde reside el programa compilado. Probablemente sea el banco de memoria más grande en el chip (tan grande como megabytes, pero puede ser tan pequeño como unos pocos kilobytes). Como normalmente no sobrescribe la memoria del programa con mucha frecuencia, la memoria FLASH utilizada aquí puede no tener una resistencia muy alta. Tal vez no más de 10,000 ciclos de escritura antes de que ya no pueda confiar en su integridad. Además, este tipo de memoria debe borrarse y programarse en grandes porciones a la vez.
Muchos microcontroladores permiten que el firmware sobrescriba su propio espacio de memoria de programa. Pero con el número limitado de ciclos de escritura disponibles, los fabricantes comenzaron a introducir un pequeño segmento de espacio en la memoria del programa que se anunciaba como "Flash de alta resistencia". Si el desarrollador del firmware mantuvo cualquier modificación de la memoria del programa en tiempo de ejecución a solo esa parte de la memoria del programa HEF, se les garantizaba órdenes de magnitud más ciclos de escritura antes de que la memoria FLASH dejara de ser confiable. Esta porción es típicamente pequeña en comparación con el tamaño total de la memoria del programa disponible. Al igual que la memoria normal del programa FLASH, el HEF debe borrarse y escribirse en grandes porciones, por lo que es un inconveniente utilizarlo como un almacenamiento rápido de los valores en tiempo de ejecución.
EEPROM significa memoria de solo lectura programable y borrable electrónicamente. El acrónimo incómodamente largo es el legado de la forma "pasada de moda" de borrar los chips ROM. La luz ultravioleta estaba involucrada. También había algo acerca de los dinosaurios. No lo sé, fue hace mucho tiempo. De todos modos, la EEPROM es una memoria no volátil para uso en tiempo de ejecución. Permite que el firmware escriba y borre algunos bytes a la vez, mucho más convenientemente que almacenar los parámetros de tiempo de ejecución en la memoria del programa. Además, su resistencia de escritura suele ser de un orden de magnitud o más que la memoria de programa normal (pero más o menos lo mismo que HEF). Es algo así como la memoria de "bloc de notas" que el desarrollador puede usar para almacenar los datos que desea recuperar después de un ciclo de apagado.
La última categoría de memoria, RAM, probablemente no necesite una descripción aquí.