Nach stundenlanger Suche bin ich einem sporadischem Problem auf die
schliche gekommen, welches ich mir nicht richtig erklären kann.
Im Bootloader eines mega328p benutze ich einen Watchdog-Reset in der
Init1 Section:
1 | void wdt_init(void) __attribute__((naked)) __attribute__((section(".init1")));
|
2 |
|
3 | void wdt_init(void)
|
4 | {
|
5 | MCUSR = 0;
|
6 | wdt_disable();
|
7 |
|
8 | return;
|
9 | }
|
Dieser Code führt allerdings dazu, dass wenn ich die Spannung lange
abgetrennt lasse (Vollentladung) das Hauptprogramm (Start nach
Bootloader) nach ein paar Sekunden abstürzt.
Auch der Bootloader kann bei längerem Betrieb abstürzen.
Das Problem tritt nicht immer auf. Bei schnellen, mehrmaligen Resets oft
nicht. Nehme ich den Code raus, ist das Problem weg.
Wieso kommt es zu derartigem Fehler?