Estoy usando el atmega328. Quiero crear una aplicación de prueba simple usando un gestor de arranque. Quiero: Parpadear un led a una velocidad en la sección de flash del cargador de arranque, y luego parpadear a otra velocidad en la sección de aplicación de flash. estos son mis bits de fusible:
Porloquesé,siconfiguroelfusibleBOOTRST
puedoestablecerdesdedóndearrancaelprograma(odesdedóndeestá)Porlotanto,heconfiguradoelprogramaparaqueseejecutedesdeeliniciodelaseccióndelcargadordearranque,0x3800
(parauntamañodepáginade2048).estoestáenlapágina282de
Esteeselcódigoactual:
#include<avr/io.h>#include<avr/delay.h>voidboot_program_page(){DDRC=0xFF;PORTC=0xFF;_delay_ms(1000);PORTC=0x00;_delay_ms(1000);}voidmain(void){boot_program_page();asm("jmp 0x0000" );// Jump to application code.
PORTC = 0xFF;
_delay_ms(10000);
PORTC= 0x00;
_delay_ms(10000);
}
Este es mi entendimiento:
Como he configurado el fusible BOOTRST
al principio de la sección del cargador de arranque, este código se graba en el cargador de arranque. Tan pronto como el programa ve el salto al código de la aplicación (comando asm), graba el resto del siguiente código en la memoria de la aplicación. sin embargo, esto no es lo que sucede, el boot_program_page()
solo se ejecuta indefinidamente.
¿Cómo puedo solucionar esto?
¡Gracias!