Hallo,
Ich habe einen CAN-Bootloader geschrieben, der brennt auch alle Bytes
richtig in das Flash (mit Auslesen und Hex-Datei vergleichen bestätigt).
Nun zum Problem:
ca. 300ms nach dem alle Bytes gebrannt sind wird die Checksumme über den
gesammten Flash (ohne Bootloader) errechnet und der zeigt die falsche
Zahl. Wenn ich zum zweiten mal diese Funktion starte, dann wird die
richtige Zahl gezeigt.
Der Code:
1 | // Liest den Flash aus und generiert eine Checksumme
|
2 | unsigned int GetFlashChksSum()
|
3 | {
|
4 | unsigned int iChk = 0x0001; // 1 hinzuzählen, damit in jedem Fall nicht 0xFFFF / 0x0000 raus kommt
|
5 | unsigned long iAdr;
|
6 | boot_rww_enable();
|
7 | for (iAdr = 0; iAdr < 0x1E000; iAdr += 2)
|
8 | iChk ^= pgm_read_word_far(iAdr);
|
9 | return iChk;
|
10 | }
|
AT90CAN128 / GNU GCC 4.3.1 / AVRStudio
Und, was hat es mit dem "boot_rww_enable();" auf sich, ich hab es nicht
ganz verstanden, nur so viel, dass es den braucht wenn der Bootloader
die Applikation starten soll.
Vielen Dank für eure Unterstützung.