Hallo, stehe im Moment vor dem Problem, dass ich eine HEX-Datei habe und daraus die tatsächliche Programmgröße (die Größe der Binärdaten auf dem Mikrocontroller) ermitteln will. Wäre schön, wenn mir jemand einen Tipp geben könnte, wie ich das realisieren kann.
mit size (bzw avr-size) direkt oder mit (avr-)objcopy das hex in ein "bin" konvertieren, dessen Dateigröße nehmen?
Kennt vielleicht jemand eine Möglichkeit, wie man direkt aus der HEX-Datei ohne den Umweg über die AVR-Tools die Dateigröße auslesen kann?
Siehe http://de.wikipedia.org/wiki/Intel_HEX Anhand der Dateigröße ist es nicht machbar. Das kann ohne Zeilenanalyse der Datei nicht funktionieren!
Ralf schrieb: > Kennt vielleicht jemand eine Möglichkeit, wie man direkt aus der > HEX-Datei ohne den Umweg über die AVR-Tools die Dateigröße auslesen > kann? Ja. Du Programmierst das "size" Programm aus den Binutils nach, nennst es "Ralf-Hex-Size", und verwendest das.
Ralf schrieb: > wie man direkt aus der HEX-Datei ohne den Umweg über die AVR-Tools > die Dateigröße auslesen kann? Sieh dir die Dateiinfo zuur Hex-Datei im Eplorer an... BTW: was willst du mit einer Dateigröße? > Kennt vielleicht jemand eine Möglichkeit, wie man direkt aus der > HEX-Datei ohne den Umweg über die AVR-Tools die Dateigröße auslesen > kann? Du meint die Speicherauslastung? Faustformel: nimm etwas weniger als die Hälfte... Und wenn du es genau wissen willst, dann machs wie beschrieben. Denn ich kann mit zwei "jumps" die Binärdatei ziemlich aufblasen: vom Resetvektor weg wird ans Speicherende gesprungen, und von dort wird in einer Schleife immer ans Speicherende gesprungen... Damit ist die Binärdatei genauso lang wie dein uC Speicherplatz hat. Die Hex-Datei ist aber nur 2 Zeilen lang. :-o
Ne, ich möchte die tatsächliche Programmgröße (die Größe der Binärdaten auf dem Mikrocontroller) aus der HEX-Datei herauslesen. Habe schon herausgefunden, dass in der HEX-Datei für jeden Datensatz eine Adresse vorhanden ist. Meine Programme beginnen immer an der Adresse 0x0000. Die letzten Zeilen meiner Datei lauten z.B.
1 | :1002A8005A65696368656E20676573656E64657411 |
2 | :0402B8003A200000E8 |
3 | :00000001FF |
Wie kann ich, bzw. kann ich daraus die Größe der Binärdaten/der letzten Speicheradresse herausfinden?
Ralf schrieb: > daraus die Größe der Binärdaten Du zählst alle gesetzten Bytes aus dem Hexfile, ignorierst mögliche Doppel-Setzungen. > /der letzten > Speicheradresse herausfinden Du merkst dir die letzte gesetzte Speicherzelle.
Danke, hab's jetzt verstanden. Ich nehme also die vorletzten Zeile der HEX-Datei
1 | :0402B8003A200000E8 |
02B8 ist die Adresse der letzten Speicherzelle, dazu zähle ich noch die Anzahl der Bytes der letzten Zeile, die davor stehen (04). Macht 02B8(696) + 4 = 700, was sich auch mit der Ausgabe des AVR-Studios deckt. Danke.
Ralf schrieb: > Die letzten Zeilen meiner Datei lauten z.B. > :10 02A8 00 5A 65 69 63 68 65 6E 20 67 65 73 65 6E 64 65 74 11 > :04 02B8 00 3A 20 00 00 E8 Hier wäre die letzte Adresse also 0x02B8+5 = 701 ABER: ein Hex-File ist so aufgebaut, dass die höchste Adresse locker auch mal mitten in der Datei kommen kann... :-o
Ralf schrieb: > Ich nehme also die vorletzten Zeile der HEX-Datei Obacht: Im Hexfile müssen die Zeilen nicht nach aufsteigenden Adressen sortiert sein. Sind es aber meistens.
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.