Estoy escribiendo un gestor de arranque compatible con Ethernet para un AVR ATmega328 MCU. Actualmente estoy ejecutando el límite de tamaño de 4k y necesito algunos consejos de diseño.
Requisitos del cargador de arranque:
- Necesita poder actualizar la aplicación a través de un simple protocolo de mensajería basado en UDP (similar a TFTP).
- Como el dispositivo funciona en una variedad de LAN, debería ser compatible con DHCP.
Con mi código actual, necesito alrededor de 4k para el controlador de Ethernet, DHCP, ARP y UDP. Plus 1.5k para la mensajería real y la programación de la aplicación.
Las optimizaciones del compilador están activadas.
Mis consideraciones actuales para continuar son:
- El código no está particularmente optimizado, así que supongo que podría guardar algunos bytes siguiendo AVR035 . Sin embargo, dudo que pueda guardar suficiente tamaño de código en esta ruta.
- Simplemente podría ampliar el área del gestor de arranque reservando 2k desde el área de la memoria superior de la aplicación para el gestor de arranque. Tengo que tener mucho cuidado de no sobrescribir esa área al programar. Y, terminaría con un gestor de arranque grande y complejo que probablemente tenga errores, que no puedo actualizar en el campo.
- Podría mover algunas funciones del gestor de arranque a la aplicación. DHCP podría ser un buen candidato: la aplicación obtiene una dirección IP a través de DHCP y la almacena en EEPROM. El gestor de arranque puede simplemente usar la dirección IP almacenada y no necesita hacer el DHCP por sí mismo. Sin embargo, esto podría ser peligroso si la aplicación falla, por ejemplo. por error de software o corrupción aleatoria.
¿Qué ruta sugerirías? ¿Hay otras ideas que debería considerar?