Forum: Mikrocontroller und Digitale Elektronik Prüfsumme berechnen und vergleichen


von Idefix (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Idefix (Gast)


Lesenswert?

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???

von Dietrich L. (dietrichl)


Lesenswert?

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
Noch kein Account? Hier anmelden.