Forum: Mikrocontroller und Digitale Elektronik crc im flash und unter Windows


von Steffen W. (surrounder)


Lesenswert?

Hallo Forum,

ich mache für meine Anwendung eine CRC Berechnugn über den kompletten 
Speicherbereich des Flash. Das ist soweit auch kein Problem.

Leider habe ich nun eine Abweichung zwischen der CRC Checksumme die ich 
im Controller berechne und der die ich hier zur Entwicklungszeit 
berechne. Als Datei erzeuge ich ja ein File mit der Endung *.elf und 
über das habe ich nun bisher am PC die Checksumme berechnet.

Wenn ich mir das *.elf aber im Editor anschaue bzw. das im Hexeditor 
anschaue dann steht da ja viel mehr drin und somit kann die Checksumme 
ja gar nie gleich sein.

Muss ich denn speziell Linken um eine Datei zu erzeugen über die ich 
dann unter Windows die Checksumme ausrechnen kann?

Danke für jeden Tip oder Hinweis.

Steffen

PS.: ich arbeite mit gcc 4.4.0

von Hc Z. (mizch)


Lesenswert?

avr-objcopy -O binary file.elf file.bin

(AVR angenommen.)  Wenn Deine .elf noch andere sections enthält 
(EEPROM), musst Du ggfs. die Argumente etwas erweitern.

EDIT:  Ich sehe gerade: über den gesamten Speicherbereich des Flash. 
Den erhältst Du so nicht, sondern nur den belegten.  Wie man den 
belegten im Programm rausfindet, dazu gab's erst neulich einen Thread.

von Hc Z. (mizch)


Lesenswert?

Ich habe nachgesehen: Das Ende des Programms ist bei gcc &_etext, das 
Ende des belegten Flashs &__data_load_end.  Genauer gesagt: das erste 
freie Byte danach.

von Steffen W. (surrounder)


Lesenswert?

Hallo,

vielen Dank für die Antwort. Das stimmt im Linkerskript habe ich am Ende 
die Variable _etext.

Ich bin da momentan noch nicht festgelegt ob ich die CRC über den ganzen 
Flash oder nur über den Bereich meiens Programmcodes berechnen möchte.

Ok, dann muss ich mir mal objcopy anschauen. Das habe ich schon richtig 
verstanden dass das ein extra GNU Tool ist und der GNU Linker selber so 
eine Funktion anstelle eines *.elf files ein Flashfile zu erzeugen nicht 
kann oder?


Steffen

von Hc Z. (mizch)


Lesenswert?

> Das habe ich schon richtig
> verstanden dass das ein extra GNU Tool ist und der GNU Linker selber so
> eine Funktion anstelle eines *.elf files ein Flashfile zu erzeugen nicht
> kann oder?

Was alles der Linker erzeugen kann, weiß ich nicht.  Aber ich bezweifle, 
dass er Raw-Code zu erzeugen in der Lage ist.  Die Informationen im 
elf-File sind ja ganz praktisch, er kann auch verschiedene Sections 
enthalten (z.B. fürs EEProm, die Fuses usw.) und es ist ein recht 
universelles Format, aus dem sich die gewünschten Endformate schnell und 
einfach erzeugen lassen.

Ich sehe deshalb wenig Sinn darin, den Linker nochmal durchlaufen zu 
lassen.  Der [avr-]objcopy frisst kaum Zeit.  Der Standard-Makefile 
verwendet auch dieses Tool, um die .hex aus .elf zu erzeugen.

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.