Forum: Mikrocontroller und Digitale Elektronik Attiny CRC im ELF File erzeugen ?


von Sascha (Gast)


Lesenswert?

Hallo,
hat jemand eine Idee oder Ahnung, wie man eine CRC in das ELF (File) 
bekommt ? Ich will das ganze Flash mit dem CRCSCAN Modul beim start der 
CPU prüfen lassen. Postbuild Tools ?

CPU = ATtiny814
IDE = Microchip/Atmel Studio 7.

Leider funktioniert das zusammenbauen des ELF (File) für den 
Productionprogrammer immer noch nicht, es fehlen dann immer die 
Lockbits.
Also fällt der Umweg über das Hex File aus.

Danke,
Gruß Sascha


PS.das wundert mich etwas das seitens des Herstellers nichts angeboten 
wird !
(zumindest nichts gefunden)

von M. Н. (Gast)


Lesenswert?

Du kannst dir theoretisch mittels objcopy (siehe google) den Flash 
Inhalt in ein *.bin schaufeln. Darüber lässt du dann ein Programm 
laufen, was die CRC berechnet. Das zurückbauen ins ELF File erfordert 
allerdings meist etwas Übung und Kenntnisse der Toolchain.

Eine Möglichkeit wäre hinter der .text section im Linkerscript eine CRC 
section
anzulegen und darin dann die CRC neu einzulinken.

Eine andere Möglichkeit ist es, sich eine Variable im Code anzulegen: 
bspw: const uint32_t __my_crc_value; und diese dann mittels 
toolchain-Tools umzubauen. Dazu wird die LMA (Load memory address), also 
die stelle an der der initwert der variablen im flash steht, ausfindig 
gemacht und das elf file an dieser Position umgefrickelt. Problem daran 
ist, zu verhindern, dass der CRC Wert der Variable im Flash mit in die 
CRC-Berechnung einfließt

Das ist beides nicht wirklich schön. Aber mir fällt spontan nichts 
anderes ein. Alles in allem kein Hexenwerk. Wenn man allerdings mit den 
Tiefen der toolchain weniger zu tun hat, ist das schon eine kleine Hürde 
sich das notwendige Wissen zusammenzusuchen. Ich habe dir leider kein 
Beispiel.

Bin gespannt, ob jemand eine gute Idee hat, die nicht so verbastelt ist 
:)

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

Sascha schrieb:
> hat jemand eine Idee oder Ahnung, wie man eine CRC in das ELF (File)
> bekommt ?

google nicht installiert?

keyword srecord/srec_cat/filter crc, http://srecord.sourceforge.net/

... hat alle tools die notwendig sind um im post build process das zu 
erreichen.

beispiele hierzu sind zahllos im web zu finden!


mt

von Rudolph (Gast)


Lesenswert?

srec_cat wird mit dem AS7 mitinstalliert und kann dann im Projekt über 
die Build-Events aufgerufen werden.

Das hier habe ich zum Beispiel in einem Projekt als "Post-build even 
command line" stehen:
srec_cat 
$(MSBuildProjectDirectory)\$(Configuration)\$(OutputFileName).hex -intel 
-fill 0xFF 0x0000 0x2ffe -crc16-l-e 0x2ffe -o $(OutputFileName).s19

von Apollo M. (Firma: @home) (majortom)


Lesenswert?

bei mir sieht das post-build event in as7 für attiny85
so aus:

srec_cat "$(OutputDirectory)\$(OutputFileName).hex" -intel -crop 0x00 
0xFFE -fill 0xFF 0x00 0xFFE -CRC16_Big_Endian 0xFFE -broken -o 
"$(OutputFileName)_crc.hex" -intel -line-length=44

von Sascha (Gast)


Lesenswert?

Ja,
die Lösung mit dem srec_cat ist mir bekannt, dabei kommt aber keine CRC 
ins .elf File rein.
Ja die Lösung einer .section im ROM zu definieren ist kein Problem, das 
geht auch aus dem C-Code heraus. Dort dann die Werte von Hand eintragen, 
die man sich aus einer Hex oder Bin Datei berechnen lässt. Über das 
linkerscript file geht es natürlich auch.
Ein .elf File zu editieren scheint mir zu komplex.

Es ist halt sehr praktisch, weil in dem .elf File alles drin ist.
Flash,EEPROM,Fuse und Lockbits.

Gruß Sascha

von Nop (Gast)


Lesenswert?

Sascha schrieb:
> Dort dann die Werte von Hand eintragen,
> die man sich aus einer Hex oder Bin Datei berechnen lässt.

Du könntest auch den Buildprozeß zweimal ausführen - das erstemal, damit 
Du eine gültige CRC kriegst, und das zweitemal, um die automatisch in 
irgendeine kleine inkludierte Sourcedatei zu verfrachten, die nicht mehr 
als ein define enthält.

von Bernd M. (bernd_m)


Lesenswert?


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.