Also angenommen zB ich hab einen Mega32, dann hat der 32KByte flash speicher. Im Flash wird ja via ISP der Prgrammcode abgelegt in Form einer *.hex File. Darf nun bei oben gen. uC die Hex Datei max. 32KByte gross sein oder wo sind da die Limits?
Die Hex Datei ist mehr als doppelt so groß wie der Flash speicher, da die Daten eben als Hex Code und nicht Binär abgelegt werden. Ganz grob kann man sagen: Die Hex Datei ist 2-2,5 mal so groß, wie die wirklichen Daten.
Das wäre recht logisch :) Gehe bei der Größe aber nicht nach der Dateigröße der (Intel-)Hexdatei, denn da ist noch etwas zusätzlicher Stuff zu den Mnemonics. Im Spezialfall Bootloader darf es nicht ganz so groß sein.
d.h. heisst meine hex Datei darf 64-80 Kbyte gross werden? Kann man das nicht irgendwie genauer rauskriegen? wieso wird denn das prog eig als hex datei abgelegt? wenn man nun die groesse der binaer datei haette waere das dann genau entsprechend die groesse des flashspeichers also 32KB?
> d.h. heisst meine hex Datei darf 64-80 Kbyte gross werden? Es heißt, daß es dir egal sein sollte, wie groß die Hex-Datei ist. Wichtig ist, wie groß der Maschinencode ist. > Kann man das nicht irgendwie genauer rauskriegen? Du kannst einfach avr-size benutzen, um dir die Größe des Code in Bytes anzeigen zu lassen.
avr-size main.o text data bss dec hex filename 4985 21 41 5047 13b7 main.o bzw im non berkely format: iswald@ewald:~> avr-size -A main.o main.o : section size addr .text 3484 0 .data 21 0 .bss 41 0 .stab 7752 0 .stabstr 4186 0 .progmem.data 1501 0 Total 16985 heist das jetzt dass mein uC 16985 Byte Flash braucht um den Code aufnehmen zu koennen!?
also ich habe einen hex2bin converter falls es dir hilft, damit musste ich früher meine hexfiles wandeln um sie mit einem Dos commandozeilen Programm auf den AVR zu flashen.
Was ist den reell sdas Problem. Das die Datei binär vorliegen soll oder warum die Datei so groß ist. Wenn Du sie binär brauchst, kannst Du sie vom Linker so erstellen lassen. Ich mache das auch so bei Dateien, die vom Bootloader geflasht werden, da mein Bootloader Binärdateien liest und ich keine Lust hatte das Intel-Hex-Protokoll mit einzubinden. Binär ist einfach leichter, wenn man hintereinander flashen will. Mit Hex kann man aber auf Grund der Struktur an verschiedenen Adressen im Flash schreiben.
> heist das jetzt dass mein uC 16985 Byte Flash braucht um den Code > aufnehmen zu koennen!? Nein. Es heißt, daß alle Segmente zusammen inklusive z.B. Debug-Informationen (stabs) soviel brauchen. Wenn du avr-size mit dem hex-File aufrufst, gibt er dir nur noch die Flash-Größe an, weil das als einziges im hex-File übrig bleibt.
avr-size main.hex text data bss dec hex filename 0 5100 0 5100 13ec main.hex Sprich mein uC brauch einen Flashspeicher von 5100 Byte um das Programm aufnehmen zu koennen? (der Mega16 hat ja zB 16 000 Byte)
Ja und Nein. Wenn keine "Löcher" in der Hex-Datei sind, also alle Daten sequentiell ins Flash kommen, dann Ja.
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.