Forum: Mikrocontroller und Digitale Elektronik Größe der Binärdaten in einer HEX-Datei ermitteln


von Ralf (Gast)


Lesenswert?

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.

von Εrnst B. (ernst)


Lesenswert?

mit size (bzw avr-size) direkt
oder mit (avr-)objcopy das hex in ein "bin" konvertieren, dessen 
Dateigröße nehmen?

von Ralf (Gast)


Lesenswert?

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?

von FPGASchubser (Gast)


Lesenswert?

Siehe http://de.wikipedia.org/wiki/Intel_HEX

Anhand der Dateigröße ist es nicht machbar.
Das kann ohne Zeilenanalyse der Datei nicht funktionieren!

von Εrnst B. (ernst)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Ralf (Gast)


Lesenswert?

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?

von Εrnst B. (ernst)


Lesenswert?

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.

von FPGASchubser (Gast)


Lesenswert?

Ich versuche es nochmal...

Siehe http://de.wikipedia.org/wiki/Intel_HEX
......
....
..

von Ralf (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Lothar Miller schrieb:
> 701
Wieviele Finger hat man an der Hand? Verzählt...  ;-)

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.