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

3

Necesito hacer esto posiblemente. Estoy utilizando keil IDE y el MCU AT89c51RD2.

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

¿Cómo puedo hacer esto?

Gracias.

EDIT

Puedo hacer esto donde parece que se puede hacer. enlace

    
pregunta Paul A.

1 respuesta

2

Es posible. Lo he hecho. Pero 8051 variantes 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 vinculaste realmente te dijo las dos formas diferentes en que esto se puede lograr. El primero, asignar XDATA a la memoria de su 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 tu micro contiene esas "instrucciones mágicas" a las que hace referencia el póster.

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

Eche 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 a la API

     

El IAP permite reprogramar una memoria Flash en el chip del microcontrolador   sin quitarlo del sistema y mientras la aplicación incrustada   se está ejecutando.

     

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

     

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

     

El ejemplo de rutinas Flash_api está disponible en el sitio web de Atmel en   la aplicación de software

     

nota:

     

Controladores C Flash para el AT89C51RD2 / ED2

     

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

     

24.10.1 Proceso

     

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

     

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

     

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

     

Antes de saltar al USER_CALL, el bit ENBOOT en el registro AUXR1 debe ser   conjunto.

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas