Gast
#99771
Hallo, Ich schreibe einen Bootloader für den ATmega162 und verwende dazu avr-libc-1.0.3 Die Downloadroutine habe ich angehängt. Zur Routine: Die Routine soll immer den ganzen Applikationsbereich beschreiben, und holt sich die binär-Daten dazu aus dem Empfangsbuffer aus dem UART der über Interrupt betrieben wird. Die Interrupts sind deshalb aktiv, sollte aber kein Problem sein, da diese in der BLS residieren. Ob neue Daten im Buffer vorliegen wird über dessen Status überprüft, da man bei binär-Daten kein EOF als return-Wert verwenden kann wie sonst üblich, weil es sich bei EOF (=0xFF) auch um gültige Daten handelt die zu programmieren sind Problem: Das seltsame daran ist, dass der Code meistens funktioniert. Es kann aber vorkommen, dass manche Stellen im Flash unprogrammiert auf 0xFFFF hängen bleiben, es handelt sich dabei immer nur um 1 word, das immer 2 byte von einer PAGE_SIZE Grenze entfernt ist, z.B.: auf Byteaddresse 0x1026, 0x2306 oder 0x0514. Ein nochmaliges Aufrufen der Routine schafft abhilfe, das entsprechende 0xFFFF lässt sich programmieren. Die Speicherzelle kann also nicht defekt sein. Welche Zelle und ob überhaupt betroffen ist scheint dem Zufall überlassen zu sein. Ich tippe eher auf ein Timingproblem. Den Verdacht das der UART dabei etwas falsch macht habe ich schon ausgeräumt, indem ich mittels Debugled überprüft habe ob jemals ein 0xFFFF an boot_page_fill() übergeben wird. Das war definitiv nicht der Fall. Vielleicht kann mir jemand sagen der den Code mal überfliegt woran das liegen kann? Markus