Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage hex Datei & Flash Programm Speicher


von Tim (Gast)


Lesenswert?

Hi!

Mal eine ganz kurze Frage: Spiegelt die Größe des Flash Programm 
Speichers eines Mikrocontrollers die maximale Größe der kompilierten HEX 
Datei dar??? Sprich also wenn mein Maschinencode etwa 50 kB groß ist und 
mein Flash nur 32kB hat dann dürfte ich Schwierigkeiten bekommen, oder?!

Gruß
Tim

von Ronny (Gast)


Lesenswert?

Die Hex-Datei ist nicht im binären Format.Alle benötigten Daten und 
Codes stehen als Hexadezimalwerte in lesbarer Form da.

Beispiel:

:12A32FC54C12.......

Dadurch kann man aus der Grösse des Hexfiles nicht auf die Grösse des 
Programms später im Flash schliessen.Dafür gibt meistens der 
Compiler/Linker eine kleine Info beim erstellen des Hexfiles 
aus,wieviele Bytes Code erzeugt wurden.Und die müssen natürlich ins 
Flash passen.

von Rolf Magnus (Gast)


Lesenswert?

Um die echte Codegröße rauszubekommen, kann man avr-size benutzen.

von Tim (Gast)


Lesenswert?

Kannst du das etwas näher erklären bitte!

von Ronny (Gast)


Lesenswert?

Das Hex-Format ist z.B. hier ganz gut erklärt:

http://www.cs.net/lucid/intel.htm

von Tim (Gast)


Lesenswert?

avr-size ist ja ganz nett, aber wie kann man das errechnen wenn man 
einen PIC Controller hat???

von Rolf Magnus (Gast)


Lesenswert?

Ich denke, avr-size dürfte es egal sein, für welchen Controller das 
Hex-File ist.
Übrigens: Du hättest auch vorher mal erwähnen können, um welchen 
Controller es eigentlich geht.

von Tim (Gast)


Lesenswert?

Das ist richtig allerdings war ja zunächst die Frage ob es einen 
Zusammenhang zwischen hex und Speicherbedarf gibt....avr-size jammert 
übrigens weil er das Format nicht kennt... :-(

von Rolf Magnus (Gast)


Lesenswert?

> Das ist richtig allerdings war ja zunächst die Frage ob es einen
> Zusammenhang zwischen hex und Speicherbedarf gibt....

Zumindest bei dem Hex-Format, das es bei den AVRs gibt, dürfte das 
Hex-File meist so grob 2,5 bis 3 mal so groß wie das eigentliche 
Programm sein, denn jedes Byte wird in Form von zwei Hexziffern 
gespeichert, dazu kommt noch einiges an Overhead durch Adressangaben und 
Checksummen. Allerdings ist das vermutlich nicht zuverlässig.

> avr-size jammert übrigens weil er das Format nicht kennt... :-(

Hmm, also benutzen die ein anderes Hex-Format?

von Εrnst B. (ernst)


Lesenswert?

Ich benutze avr-size, bzw das normale i386-gcc-size Programm für 
PIC-Hexfiles, kein Probem...

Aufruf mit:
avr-size --target=ihex -t -B xxx.ihx
bzw
size --target=ihex -t -B xxx.ihx

/Ernst

von Mike R. (thesealion)


Lesenswert?

Wenn du das Programm mit MPLAB geschrieben hast, mußt ud dir nach dem 
Übersetzen nur das .lst File ansehen. Da steht am ende der 
Speicherbedarf drin.

von Tim (Gast)


Lesenswert?

@ Mike: Muss man da irgendwas einstellen daß er diese Datei erstellt???? 
Nach dem Kompilieren kann ich diese Datei nirgends finden...

von Mike R. (thesealion)


Lesenswert?

Nicht das ich wüßte.

Ich erstell einfach ein Projekt mit den benötigten Dateien
und nach dem compilieren liegt die Datei im selben Ordner wie das .hex 
File.
Dabei hat sie den gleichen Namen, der Unterschied ist nur, das die 
Endung halt lst lautet.

von Micha (Gast)


Lesenswert?

Habe folgendes Kommando ausgeführt:

> "avr-size" --target=ihex -t -B main.hex

und dabei diese Daten erhalten.
Kann mir jemand bitte beschreiben was das genau heißt?

   text     data      bss      dec      hex  filename
      0     1900        0     1900      76c  main.hex
      0     1900        0     1900      76c  (TOTALS)

> Process Exit Code: 0
> Time Taken: 00:00

schöne Grüße

von Micha (Gast)


Lesenswert?

gibt es keinen der sich da auskennt?

von Marco S. (masterof)


Lesenswert?

und mal in die doc geschaut von avr-gcc

von tastendrücker (Gast)


Lesenswert?

Womit erzeugst Du denn nun das HEX-File?

Wenn du MPLAB/MPASM nimmst, liegt im gleichen Verzeichnis wie das 
HEX-File auch ein LST-File. Da steht alles drinnen. Ich meine sogar, in 
MPLAB wird nach dem Assemblieren das LST-File automatisch angezeigt oder 
zumindest ein Protokoll, in dem die Info auch steht.

von crazy horse (Gast)


Lesenswert?

ansonsten kann man es auch "zu Fuss" am Hex-file erkenne.
Vorletzte Zeile des Hex-Files anschauen
z.B.:
:1003BE00F0E008951A930A930895099119910895FA
:00000001FF

:10 Anzahl der Datenbytes in dieser Zeile (16)
:03BE Startadresse für diese Datenbytes

Dementsprechend wird der Speicher bis 0x03CE beschrieben.
Kleine Tücke dabei: die einzelnen Datensätze müssen nicht unbedingt in 
streng steigender Form abgespeichert sein, also evtl. höchste 
Startadresse suchen.
Es gibt auch jede Menge Hex-Editoren, das sieht man das dann schön.

Aber eigentlich gibt jeder Assembler/Compiler die erzeugte Codegrösse 
aus, wie schon gesagt wurde.

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.