¿Cuál es la diferencia entre la memoria de datos EEPROM y la RAM?

3

Desde hace unos días he estado jugando con los microcontroladores PIC y un Pickit 3. Estaba escribiendo algunos programas de prueba en MPLAB donde encontré una buena tabla de estadísticas como esta aquí:

Despuésdecrearalgunasvariablesyexpandirmiprograma,notéquelapartede"Datos 25" aumentaba. Después de hacer algunas matrices de enteros y compilarlas, los datos fueron del 100% y el programa no pudo compilar debido a la falta de memoria. Desafortunadamente, necesito esta memoria extra para terminar mi programa.

Aquí llego a mis primeras preguntas

  • ¿Es cierto que los datos 25 son iguales a las variables utilizadas?
  • ¿Es cierto que el Programa 512 es la cantidad de memoria utilizada para almacenar el programa?

Estas son dos preguntas secundarias que tengo, aquí viene mi pregunta principal.

Suponiendo que mis dos afirmaciones fueran ciertas, me dirigí al sitio web de microchip para buscar un chip con más datos (RAM) disponibles. Aquí es donde miré. Como puede ver, también hay una columna que dice "EEPROM Memoria de datos ".

Mi pregunta es: ¿Cuál es la diferencia entre los datos (RAM) como se muestra en la imagen y esta memoria de datos EEPROM? ¿Para qué es útil la memoria de datos EEPROM? Soy nuevo con la electrónica y he estado jugando con un pic12f508 hasta ahora. Espero que alguien pueda aclararme esto porque no entiendo este concepto. Gracias!

    
pregunta Markinson

4 respuestas

3

quizás esto tenga sentido a modo de ejemplo, no tengo un compilador de imágenes a mano pero no importa con respecto a la pregunta.

Toma este código

unsigned int xyz=5;
unsigned int fun ( unsigned int x )
{
    return(x+xyz);
}

Compilarlo, ensamblarlo y enlazarlo. Luego desmóntalo para mostrar el resultado de eso

Disassembly of section .text:

00000000 <_start>:
   0:   e3a0d902    mov sp, #32768  ; 0x8000
   4:   eb000000    bl  c <fun>
   8:   eafffffe    b   8 <_start+0x8>

0000000c <fun>:
   c:   e59f3008    ldr r3, [pc, #8]    ; 1c <fun+0x10>
  10:   e5933000    ldr r3, [r3]
  14:   e0800003    add r0, r0, r3
  18:   e12fff1e    bx  lr
  1c:   20000000    

Disassembly of section .data:

20000000 <xyz>:
20000000:   00000005

Entonces, tenemos una variable global xyz, esto es información, esto va en memoria RAM, podemos leerlo y escribirlo, cambiar su valor, lo que sea, tiene que estar en un disco de lectura / escritura.

El programa que es el código de la máquina es básicamente desde la dirección 0x00000000 a 0x0000001F arriba.

Entonces la memoria del programa también conocida como .text es el programa que contiene las instrucciones. La memoria de datos, también conocida como .data, es la variable de lectura / escritura en particular como esta que se inicializa previamente en algún valor. Los que no están inicializados a algún valor se encuentran en el segmento .bss pero aún están en el ram ya que son variables de lectura / escritura.

Cuando el microcontrolador está apagado, el ram está apagado, no funciona, no puede almacenar valores. Se utilizan EEPROM y FLASH y otras formas de memoria no volátil. El procesador / hardware está diseñado para saber cómo comenzar a usar esa memoria y los programas están diseñados para operar desde esa memoria. Puede ver que tenemos un problema, debemos recordar que la variable xyz debe comenzar con el valor 5, pero la RAM es volátil. Por lo tanto, debemos tener en la memoria no volátil tanto el programa como cualquier otro elemento que necesitemos conocer. Por lo tanto, todo .text y, en el caso de un microcontrolador, generalmente el programa se ejecuta desde un chip flash y el procesador de microcontroladores accede a él en las direcciones que hemos vinculado. Los valores de datos. No he mostrado aquí la magia de arranque, pero el arranque que se ejecuta antes de la función del punto de entrada C (generalmente principal pero que es arbitrario) tiene unos pocos trabajos por hacer. Primero se establece el puntero de pila para que tengamos una pila, normalmente el núcleo del procesador no sabe cuánta RAM hay, por lo que el software lo hace. Segundo, debe copiar cualquier valor de datos a ram para que el programa C pueda encontrarlos, por lo que en este caso el valor 0x00000005 estará en algún lugar en flash y sabremos que tenemos que copiar ese valor en la dirección 0x20000000 en ram. En tercer lugar, y no necesariamente en este orden, habrá información de dirección y tamaño para .bss, no tengo ninguna variable bss en este ejemplo, pero si la hubiera, tendríamos una dirección de inicio y un número de bytes de información que tendríamos a continuación. el código a cero como programador a veces asume que una variable sin un valor asignado en el momento de la compilación será cero si la leen antes de escribirla.

Entonces, la memoria de datos es el ram, supongo que de tu salida te dice cuántos bytes de variables ha detectado el compilador que tu programa necesita. La memoria del programa es el propio programa el código de la máquina. El flash que usted no preguntó mantendrá la memoria del programa y la información sobre la memoria de datos para que su programa pueda funcionar. Y luego está la EEPROM, que es otra forma de memoria no volátil donde puede guardar algunos elementos. a menudo se accede a través de una biblioteca o código que usted escribe, pero no se accede normalmente como un nombre de variable simple ni se ejecuta a través de un programa (en un microcontrolador). Digamos que su dispositivo es un reproductor de mp3 y la música también está en la memoria flash, tal vez en forma de un sistema de archivos con archivos. Es posible que desee agregar la función de que cuando se apaga el dispositivo, se reproduce el último archivo y dónde se guardará en ese archivo para que, cuando vuelva la alimentación, pueda continuar. Puede almacenar esta información en el ram y hacer que la batería en el dispositivo mantenga el ram con vida, o puede almacenarlo en flash si hay espacio, o puede almacenarlo en la EEPROM si su dispositivo tiene EEPROM. A menudo usaría EEPROM para obtener información de tiempo de ejecución que desea conservar a través de un ciclo de energía. Al igual que la lectura del odómetro en un automóvil, incluso si la batería está desconectada, usted desea recordar el kilometraje del automóvil, de modo que cuando esté en funcionamiento nuevamente, pueda continuar a partir de ese valor y no comenzar desde cero cada vez. recuerda las preferencias de la estación de radio de los usuarios para los botones de acceso directo.

    
respondido por el old_timer
2

La memoria de datos en las fotografías son registros físicos dentro del dispositivo y es muy limitada, aunque la cantidad depende del dispositivo.

La memoria de programa es un área de memoria separada en el dispositivo que se puede programar estimulando el dispositivo de una manera especial. Esta memoria está vinculada a la instrucción PICS que ejecuta la máquina de estados.

La memoria de datos EEPROM es un área de la memoria en el chip en la que puede almacenar programáticamente los valores que se retendrán durante los cortes de energía del dispositivo. Una vez programados, los valores permanecerán allí durante la vida útil del dispositivo o hasta que los vuelva a programar. Sin embargo, es una función IO.

Las EEPROMS generalmente son lentas para escribir y leer, y tienen una vida limitada de sobre escritura en comparación con la memoria normal. Por lo general, la EEPROM se usa para almacenar las condiciones de configuración, o los contadores que necesita retener cuando la batería está agotada o lo que sea.

    
respondido por el Trevor_G
2

Además de la respuesta de Trevor, me gustaría agregar algunas cosas. El acceso a los datos en una EEPROM toma más tiempo que el acceso a la RAM, ya que la obtención de datos desde la EEPROM generalmente requiere más instrucciones, y usted está limitado a la velocidad de la EEPROM. Debido a esto, si su espacio de memoria es limitado, es una buena práctica colocar sus datos / tablas constantes y / o sus datos que no se utilizan con tanta frecuencia en la EEPROM. Esto aumentará tu velocidad general y te ayudará a usar tu memoria de manera más eficiente.

    
respondido por el Çetin K
2

Pides diferencia entre EEPROM y RAM ...

EEPROM es No volátil (recuerda los datos después del apagado), que es la parte interesante. Sin embargo es:

  • lento
  • Generalmente requiere instrucciones especiales o bibliotecas para leer / escribir
  • Tiene una capacidad de escritura limitada

EEPROM en comparación con Flash:

  • Flash es más rápido y más barato (por lo que tu micro lo usa para almacenar su programa)
  • EEPROM tiene una resistencia de escritura mucho mayor (ciclos de 100k-1M versus 1k-10k)
  • EEPROM permite borrar / modificar un solo byte, mientras que Flash requiere borrar un bloque completo

Cada tipo de memoria tiene su uso:

  • SRAM: las variables de tu programa
  • EEPROM: configuración, calibración, configuración, etc.
  • Flash: programa, grandes cantidades de datos, registros, etc.
respondido por el peufeu

Lea otras preguntas en las etiquetas