lunes, 12 de agosto de 2019

Ubicando código en la memoria FLASH-ROM


Después que nuestro código a sido grabado dentro de la memoria de programa tales como atmega32 o cualquier micro de atmel, el OPCODE y OPERANDO son guardados en la memoria de programa iniciando desde la dirección 0x0000. Por ejemplo veamos como se guarda este bloque de código en la memoria de programa:

código-almacenamiento de la última dirección de memoria SRAM.
Creé un proyecto y le puse nombre "litle endian metodo-ejemplo"Una vez escrito el código, Construimos los archivos(Build)  y en la carpeta DEBUG se construyen archivos .map, .lss,entre otros como el de la imagen:
Archivos generados en carpeta debug.
Ahora nos enfocaremos en el archivo .lss. El archivo ,lss es muy útil para nosotros los programadores. Aquí se muestra el código binario y código fuente, además muestra que instrucciones son usadas en el código fuente, y la cantidad de memoria del programa usada, este archivo al igual que el .map pueden ser accedidos por un editor de texto tal como notepad y verlos en el monitor, el programador usa este archivo para asegurarse el correcto desempeño  del sistema.

Archiv list(.lss) generado
En la imagen anterior se muestra el archivo generado .lss, solo se muestra una sección del mismo esta plasmado de mucha información , pero nos enfocaremos en la parte donde esta nuestro código que hemos escrito:
Archivo list(.lss)-sección code
Como se observa en la imagen anterior, a la izquierda la conforma las direcciones que ocupa nuestro código, empieza en la dirección 0x0000, con su respectivo OPCODE y OPERANDO. Si deseas saber como se representa el OPCODE y OPERANDO de una instrucción, en este blog hay un ejemplo.  

El dato en la memoria Flash de los AVR es guardado de un forma llamada “Little-endian”. Esto significa que el byte alto del código es ubicado en la dirección alta de la ubicación de la memoria FLASH, y el Byte bajo del código es ubicado en la dirección baja de la ubicación de la memoria FLASH. Compare el primer Word del código (e008) con los dos primeros Byte de la memoria FLASH(08e0).

Método-Litle endian
 Ahora ya sabemos como se guarda en memoria FLASH-ROM cada línea de código, está formado por una palabra(2Bytes) y se irán guardando de la siguiente manera:

¿Puedo guardar datos en  memoria FLASH-ROM?

Pues sí, también podemos guardar datos, que usaremos ,estos datos en asembler se pueden guardar a través de "tablas", dándoles un origen de memoria. Para leer los datos en memoria en forma de "tablas" es muy importante desplazar un bit hacia la izquierda utilizando “<<” o que es lo mismo multiplicando *2 la dirección  de donde se dio origen a la tabla de datos ya que al momento de guardar un dato en una tabla este empieza en la dirección x2 de donde se dio origen a dicha tabla. Puedes ver un ejemplo de tablas en el siguiente video:

Conclusión

  •  Nuestro código se guarda en forma de OPCODE y OPERANDO.
  • Los OPCODES y OPERANDOS se guardan en memoria FLASH usando el método "Litle Endian".
  • En la memoria Flash no solo se guarda código, vectores de interrupción, programa bootloader, también se puede guardar datos  usando "tablas".
  • Las instrucciones LPM y SPM se usa frecuentemente en esta memoria FLASH.
  • Program Counter es que va a ir saltando de dirección en dirección de la FLASH-16 bits.

No hay comentarios:

Publicar un comentario

Uso del firmware original de la grabadora USBasp AVR en MX-USBASP (clon chino)

Te vendieron un USBisp pensado que es un USBasp?? Hace 2 meses compré un "USBasp" fui a probarlo y no funcionó....pensé me estafar...