Estoy trabajando en una implementación de AVR109, donde el cargador de arranque se agota después de dos segundos si una serie determinada de bytes no se recibe en el puerto serie y luego inicia la aplicación principal usando un puntero de función a la dirección 0.
El cargador de arranque funciona bien y puedo programar el AVR a través del puerto serie. Pero cuando el AVR solo contiene el cargador de arranque y la memoria flash en la ubicación 0 está vacía, se necesitan dos segundos además del tiempo de espera del cargador de arranque cada vez que se reinicia el AVR. ¿Por qué no es instantáneo? ¿Por qué el AVR no se reinicia inmediatamente cuando el cargador de arranque coloca el puntero en un área vacía en el flash? ¿Es esto algo que puedo configurar?
EDITAR: Mi acertijo del cargador de arranque en realidad resultó ser causado por PEBCAK . Un error en el ciclo de tiempo inicial en el cargador de arranque causó la demora adicional de dos segundos y se solucionó. Al saltar al inicio de una memoria flash en blanco/borrada, en realidad solo tomó unos pocos milisegundos antes de que el cargador de arranque se iniciara nuevamente, es decir, no fue un gran problema. Pero el mejor enfoque es verificar la ubicación de la memoria flash antes de saltar allí. Si se borra, simplemente reinicie el cargador de arranque en lugar de saltar al área vacía.
Bueno, la respuesta al comportamiento del sistema es "quién sabe" porque básicamente tiene un comportamiento indefinido porque no hay nada escrito para flashear en la MCU que intentará usar lo que sea que esté en la dirección 0 como vector de reinicio para la aplicación. si se borra, intentará usar 0xffff y no creo que el AVR emita una excepción cuando salga de los límites de la memoria y ejecutará alguna instrucción aleatoria y probablemente se quede allí hasta que el perro guardián u otra instrucción no válida provoque un reinicio. La mayoría de los cargadores de arranque tienden a verificar el valor en el vector de reinicio (generalmente la dirección 0) para verificar que no esté en blanco y, si lo está, simplemente activan el cargador de arranque indefinidamente para evitar que la MCU tenga un comportamiento indefinido.
PlasmaHH
Eugenio Sh.
Oystein
Oystein
PlasmaHH
Eugenio Sh.
Oystein
Oystein
Eugenio Sh.
Eugenio Sh.
Oystein
Eugenio Sh.
tom carpintero