el. ¿El archivo hex que quemamos va a la memoria flash o RAM o EEPROM de Atmega8?

3

La memoria flash de atmega8 es de 8Kb.

¿Es este el tamaño máximo para el archivo .hex o la memoria máxima que puedo asignar a las variables en mi código?

Si nada de lo anterior es cierto, ¿cuál es la estructura de asignación de memoria de Atmega8? ¿A qué memoria va el archivo .hex?

    
pregunta shafeeq

3 respuestas

2

En el uso estándar, su código ingresa en los 8 Kbytes de la memoria Flash y las variables ingresan en el 1 Kbyte de SRAM. Tenga en cuenta que, dado que un archivo hexadecimal representa un solo byte como un par de caracteres hexadecimales y contiene otra información, tendrá el doble del tamaño del código real que se cargará, por lo que debería cargarse un archivo hexadecimal de más de 16K.

El lugar más confiable para conocer gran parte de Flash y SRAM que usa su código es desde el compilador. Si está utilizando Atmel Studio 6 en el área de salida de compilación, si se desplaza hacia arriba, debería ver algo como:

  

Uso de la memoria del programa: 540 bytes 0,8% completo

     

Uso de la memoria de datos: 0 bytes 0.0% completo

Por lo tanto, el uso de la memoria del programa muestra la cantidad de Flash que se usará y el uso de la memoria de datos muestra la cantidad de SRAM que se usará.

    
respondido por el PeterJ
1

La memoria flash es la memoria de su programa. Ahí es donde se almacena su archivo hexadecimal. Puede forzar los datos en la memoria flash si tiene poca memoria RAM, pero no es tan rápido de lectura / escritura como la memoria RAM.

RAM es la memoria utilizada en el tiempo de ejecución, para variables y para cualquier otra cosa que deba accederse sobre la marcha.

EEPROM es una memoria no volátil para almacenar cosas como datos de calibración, números de serie, etc. Rara vez se usa para algo que necesita escribirse regularmente.

    
respondido por el Matt Young
0

Para el uso real de la memoria, vea el archivo del mapa. En el caso de la cadena de herramientas GCC, lo hacen por vinculador como:

avr-ld -Map=app.map

o mediante el controlador gcc :

avr-gcc -Wl,-Map,app.map
    
respondido por el gavenkoa

Lea otras preguntas en las etiquetas