Los cargadores de arranque en sistemas embebidos pueden ser ligeramente diferentes de las computadoras de propósito general en que puede configurar el procesador (en un espacio aparte de la memoria de código, a menudo "fusibles") para comenzar la ejecución desde una dirección de memoria diferente . Lo que esto permite es una inyección de código (el gestor de arranque) que puede observar una señal especial para hacer algo diferente (normalmente para reprogramar el dispositivo). Si no se ve la señal, el cargador de arranque normalmente redirige a la dirección de inicio tradicional y las cosas continúan normalmente.
Lo que permite la ubicación de inicio ajustable es un binario único y fijo para trabajar con y sin un cargador de arranque, siempre que cuando se compile el programa principal no se superponga con la memoria utilizada para el cargador de arranque. Entonces, al programar el dispositivo, hay dos opciones aproximadas:
- Programe el dispositivo solo con el programa principal y deje solo el fusible del cargador de arranque. Al reiniciarse, el procesador comienza la ejecución del programa principal en la ubicación normal.
- Programe el dispositivo con el programa principal (no modificado) y el cargador de arranque, y configure el fusible del cargador de arranque según corresponda. Al reiniciar, el procesador comienza a ejecutarse en el gestor de arranque, que puede hacer algo (por ejemplo, reprogramación) o nada (pasar el control a la ubicación normal).
Si el procesador no tiene un fusible del cargador de arranque y usted desea un cargador de arranque, es un poco más complicado, pero aún así es posible (por ejemplo, un cargador de arranque ATtiny).
En cualquier caso, los sistemas integrados no necesitan un cargador de arranque como las computadoras. Cuando el procesador se enciende o, de lo contrario, se reinicia, se activa una interrupción de reinicio que (debería) reinicializar la memoria y los periféricos al estado especificado en la hoja de datos. En un AVR, el contador del programa solo se establece en 0, por lo que el procesador toma lo que está allí y se va. Si está utilizando cualquier interrupción, normalmente el primer grupo de direcciones de memoria son todas JMP xxxx
, que sirve como tabla vectorial, pero si no tiene interrupciones, la lógica de su programa puede comenzar ahí y allí.