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.