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.