Escritura de parámetros en la memoria de código en tiempo de ejecución durante las inicializaciones - 8051

Necesito hacer esto posible. Estoy usando Keil IDE y el MCU AT89c51RD2.

En la inicialización, se llamará a una función para derivar alrededor de 1500 bytes. Quiero escribir este byte en la memoria de código (byte por byte), porque nunca cambiará durante todo el programa. Sé que esto puede tomar alrededor de 2 páginas de memoria Flash.

¿Cómo puedo hacer esto?

Gracias.

EDITAR

Ensucie esto donde parece que se puede hacer. http://www.keil.com/forum/3483/

Corríjame si me equivoco, pero Flash de 89C51 solo se usa para almacenar programas y no está disponible para aplicaciones.
@Swanand ¡Tienes toda la razón! Pero hay una forma de escribir en una página o páginas de la memoria Flash, incluso en tiempo de ejecución. He oído hablar de eso... por eso pregunto.
Lo dudo... ¿Puedes agregar la referencia de la hoja de datos o algo donde lo diga?
@Swanand ¡Mira mi edición! Hay un enlace, pero nadie claramente dio una respuesta.

Respuestas (1)

Es posible. Lo he hecho. Pero a las variantes 8051 realmente no les gusta hacer esto. Si está interesado en saber por qué no les gusta hacer esto, lea sobre Arquitectura de Harvard .

La primera respuesta en el hilo que vinculó en realidad le dijo las dos formas diferentes en que se puede lograr. El primero, mapear XDATA sobre su memoria de código y luego usar las instrucciones de ensamblaje de XDATA para escribir en ese espacio es más problemático de lo que vale. Digo esto porque su micro contiene esas "instrucciones mágicas" a las que hace referencia el cartel.

Debe vincular una biblioteca que puede obtener del sitio web de Atmel y luego puede hacer llamadas a estas instrucciones mágicas y escribir en el flash a través de la Programación en el sistema (ISP), también llamada Programación en la aplicación (IAP) en la literatura .

Echa un vistazo a la hoja de datos . Probablemente debería leer toda la Sección 24. Pero la parte importante es la Sección 24.10.

24.10 Descripción de la llamada API

El IAP permite reprogramar una memoria Flash en el chip de un microcontrolador sin quitarlo del sistema y mientras se ejecuta la aplicación integrada.

La aplicación de usuario puede llamar a algunas rutinas de la interfaz de programación de aplicaciones (API) que permiten IAP. Estas API son ejecutadas por el gestor de arranque.

Para llamar a la API correspondiente, el usuario debe utilizar un conjunto de rutinas Flash_api que se pueden vincular con la aplicación.

Hay ejemplos de rutinas Flash_api disponibles en el sitio web de Atmel en la aplicación de software

nota:

Controladores flash C para AT89C51RD2/ED2

La descripción y los argumentos de las llamadas API se muestran en la Tabla 24-10.

24.10.1 Proceso

La aplicación selecciona una API configurando los registros R1, ACC, DPTR0 y DPTR1.

Todas las llamadas se realizan a través de una interfaz común “USER_CALL” en la dirección FFF0h.

El salto en USER_CALL debe realizarse mediante la instrucción LCALL para poder regresar a la aplicación.

Antes de saltar a USER_CALL, se debe establecer el bit ENBOOT en el registro AUXR1.