Hallo, ich verstehe nicht ganz was es mit der Prüfsumme auf sich hat. Ich programmiere mit dem c167µC und möchte kontrolliere, ob ein Programm korrekt im Speicher liegt. Dafür gibt es folgende Funktion, die Byteweise den Speicherbereich durchläuft und alles aufsummiert. Am Ende wird der Wert mit dem, der am Ende des Speicherbereichs steht vergleich. Dort soll die richtige Prüfsumme gespeichert sein. MAcht das der Compiler beim compilieren? bit checksum() { int chksum; long i; chksum=0; //////// Calculate checksum /////////////// for(i=BEGIN_APP_ROM; i<END_APP_ROM; i+=2) chksum = chksum + *((uword far*)(i)) + 1; if(chksum == *(uword far*)(END_APP_ROM)) ///// Checksum was successful //// return 1; else return 0; // Checksum Failed } Hoffe mir kann jemand weiter helfen. Finde darüber im Internet nichts Gruß Idefix
Idefix schrieb: > Dort soll die richtige Prüfsumme gespeichert sein. MAcht das der > Compiler beim compilieren? Das kann ich mir nicht vorstellen. Da musst du dich schon selber darum kümmern, wie du die Prüfsumme an eine bestimmte Position in den Speicher platzierst.
Komisch, in der Application Note steht folgendes: After a hardware or software reset the checksum is executed. If the checksum matches the value that is programmed into a reserved location (the last 2 bytes of the flash memory), the application code is jumped to. Bloß es wird nirgends ein Wert in den reservierten Speicherbereich programmiert???
Das geht im Prinzip etwa so: 1. Programm schreiben und übersetzen. 2. die Ergebniswerte aus dem Hex-File nehmen und alle freien Speicherstellen mit dem Wert des leeren Flashs füllen 3. über den ganzen Speicherbereichs des Flash die Checksum errechnen 4. diesen Wert an den letzten 2 Byte-Adressen des Flashs speichern Wie man das konkret umsetzt, ist eine andere Frage. "Früher" (mit EPROMS) haben wir das so gemacht: - beim EPROM-Programmer den Speicher mit dem Leer-Wert des EPROMS laden - HEX-File laden - CHKSUM über den gesamten Inhalt rechnen (macht der Programmer) - Wert "zu Fuß" in die letzten beiden Speicherstellen schreiben - HEX-File aus dem Programmer-Speicherinhalt erzeugen. Alternative: - Software schreiben, die das macht. Das der Compiler dieses machen kann, ist mir noch nicht begegnet. Gruß Dietrich
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.