Arduino Bootloader

¿Alguien puede explicar cómoArduino bootloader ¿trabajos? No estoy buscando una respuesta de alto nivel aquí, he leído el código y lo entiendo.

Hay una gran cantidad de interacción de protocolos que ocurre entre el IDE de Arduino y el código del gestor de arranque, lo que finalmente da como resultado una serie de instrucciones de ensamblaje en línea que autoprograman el flash con el programa transmitiéndose a través de la interfaz en serie.

Lo que no tengo claro es en la línea 270:

void (*app_start)(void) = 0x0000; 

... que reconozco como la declaración, y la inicialización a NULL, de un puntero de función. Hay llamadas posteriores a app_start en lugares donde el gestor de arranque está destinado a delegar a la ejecución del código cargado por el usuario.

Seguramente de alguna maneraapp_start necesita obtener un valor no NULL en algún momento para que todo esto se una. No veo eso en el código del gestor de arranque ... ¿está mágicamente vinculado por el programa que se carga por el gestor de arranque? Supongo que el principal del cargador de arranque es el punto de entrada al software después de un reinicio del chip.

Envuelto en las aproximadamente 70 líneas de ensamblaje debe ser el anillo decodificador secreto que le dice al programa principal dónde está realmente app_start? ¿O tal vez es un conocimiento implícito aprovechado por el IDE de Arduino? Todo lo que sé es que si alguien no cambia app_start para apuntar a otro lugar que no sea 0, el código del gestor de arranque simplemente girará sobre sí mismo para siempre ... ¿cuál es el truco?

Editar

Estoy interesado en intentar portar el cargador de arranque a un Tiny AVR que no tiene espacio de memoria separado para el código del cargador de arranque. Como me parece evidente que el código del cargador de arranque se basa en ciertas configuraciones de fusibles y soporte de chip, creo que lo que realmente me interesa saber es qué se necesita para portar el cargador de arranque a un chip que no tiene esos fusibles y hardware soporte (pero todavía tiene capacidad de autoprogramación)?

Respuestas a la pregunta(2)

Su respuesta a la pregunta