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
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.
Um die echte Codegröße rauszubekommen, kann man avr-size benutzen.
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.
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... :-(
> 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?
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
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.
@ Mike: Muss man da irgendwas einstellen daß er diese Datei erstellt???? Nach dem Kompilieren kann ich diese Datei nirgends finden...
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.