AVRDUDE und Intel-Hex

Gast #7140984
Lesenswert?

Hallo,

weiß jemand, ob man die Speicherbreite beim Schreiben von Intel_HEX 
files einstellen kann?

Mit dem AVR-Studio bekomme ich 0x10 bytes pro Zeile:
:1000000028632920323031352D3230313620736566
:100010007276612D74732E636F6D00FF0C4D8B5DD6
mit AVRDUDE dagegen 0x20 bytes pro Zeile:
:2000000028632920323031352D323031362073657276612D74732E636F6D00FF2E3D415 
988
:2000200043424C304130303537393234323031370000018E00000176000049E20000490 
2CD

Grüße,

Achim
Gast #7141004
Lesenswert?

srec_cat sollte sowas können. Das wird auch von Microchip Studio mit 
angeschleppt (...Atmel\Studio\7.0\shellutils\srec_cat.exe).

Ob Du mit neu compilieren schneller bist als mit Durchlesen und kapieren 
der Anleitung zu srec_cat, kann ich allerdings nicht sagen.
Gast #7141012
Lesenswert?

Vielen Dank für die schnellen Antworten!
Ich wollte es einheitlich mit AVR-Studio, weil ich das EEPROM-File 
selber Parse / erstelle.
Dann werde ich das einfach in meiner Software variabel gestalten...

Grüße,

Achim
#7141025
Lesenswert?

Achim schrieb:
> Ich wollte es einheitlich mit AVR-Studio, weil ich das EEPROM-File
> selber Parse / erstelle.

Dann erstelle es als binary und lasse es in hex konvertieren. Wer 
erstellt bitte direkt hex? Das ist doof.
Und fürs parsen gilt was Jörg schon sagte: Erstelle den Parser so dass 
es laut Spec funktioniert, oder konvertiere vorher in bin, wenn du das 
parsen nicht sauber hinbekommst.
Persönliche Seite #7141060
Lesenswert?

Falls du die Dateien aber vergleichen willst hilft das srec_cat Tool. 
Damit kannst du s19/ihex etc hin und her konvertieren, Füllen, 
Abschneiden etc. aber auch einfach die Länge einer Intel-Hex Zeile 
ändern.

Von 32Byte Daten zu 64Byte pro Zeile:
srec_cat dump.hex -intel -output dump_formatx.hex -intel -line-length=76

Von 64Byte Daten zu 32Byte pro Zeile:
srec_cat dump.hex -intel -output dump_formatx.hex -intel -line-length=44
Gast #7141124
Lesenswert?

Cyblord -. schrieb:
> Dann erstelle es als binary und lasse es in hex konvertieren. Wer
> erstellt bitte direkt hex? Das ist doof.

Sicher ? Intel Hex kann Informationen speichern, die ein .bin so nicht 
enthält.

Damit meine ich jetzt nicht die kaum genutzte Programmstartadresse.

Die Prüfsumme pro Zeile kann auch nur grobe Schnitzer abfangen.

Aber zum Besipiel sind mit Intel Hex oder Motorola Srec Speicherbereiche 
möglich, denen kein Wert zugewiesen wird.

Bei 2 GB Adressraum mag man u.U. nicht alles mit 0x00 füllen bevor es 
endlich los/weiter geht.

Wenn die Werte in der Datei ab Adresse 0 abzulegen sind und keine Lücken 
beinhalten, ist eine .hex-Datei halt mehr als doppelt so groß.
#7141142
Lesenswert?

FOp schrieb:
> Aber zum Besipiel sind mit Intel Hex oder Motorola Srec Speicherbereiche
> möglich, denen kein Wert zugewiesen wird.

Klar, für große und stark segmentierte Speicherbereiche hat hex 
Vorteile. Das kommt aber im klassischen Controller-Umfeld und den dort 
Vorkommenden Flash-Größen nicht wirklich zum tragen.
Allgemein gesehen hast du sicher recht. Aber auch dann würde man die hex 
nicht from Scratch Byte für Byte bauen, sondern evt. aus mehreren 
Binaries zusammensetzen lassen.
Der TE macht den Eindruck, er erstelle die Daten nativ und direkt als 
hex.
Moderator Persönliche Seite #7141165
Lesenswert?

Cyblord -. schrieb:
> Das kommt aber im klassischen Controller-Umfeld und den dort
> Vorkommenden Flash-Größen nicht wirklich zum tragen

Stimmt so nicht, bei vielen ARMs fängt der Flash erst auf höheren 
Adressen an (0x200000, 0x400000 oder so). Wenn du dafür ein .bin File 
baust, dann hast du da megabyteweise Nullen am Anfang.

Selbst für den hier besagten EEPROM eines AVR kann ein Dateiformat mit 
Adressierung sinnvoll sein: Zelle 0 war bei AVRs gefährdet, wenn während 
des Schreibvorgangs ein RESET auftritt. Insofern kann es wünschenswert 
sein, dass man seine eigenen EEPROM-Daten etwas weiter hinter legt, und 
ein Füllen mit 0 am Anfang würde alle Zellen davor umprogrammieren, 
während ein weiter hinten beginnendes Hexfile sie unangetastet (und 
damit auf 0xFF) lässt.
#7141170
Lesenswert?

Jörg W. schrieb:
> Cyblord -. schrieb:
>> Das kommt aber im klassischen Controller-Umfeld und den dort
>> Vorkommenden Flash-Größen nicht wirklich zum tragen
>
> Stimmt so nicht, bei vielen ARMs fängt der Flash erst auf höheren
> Adressen an (0x200000, 0x400000 oder so). Wenn du dafür ein .bin File
> baust, dann hast du da megabyteweise Nullen am Anfang.

Natürlich macht man das nicht so. Man flasht das binary erst ab der 
Flash Adresse. Gibt das ST-Link Tool usw. ja selbst schon so vor.
Geht ja nicht anders. Die Adressen davor kann dein Flasher-Tool ja gar 
nicht flashen. Was soll er mit den Megabyte nullen am Anfang also tun?
#7141182
Lesenswert?

Jörg W. schrieb:
> Cyblord -. schrieb:
>> Was soll er mit den Megabyte nullen am Anfang also tun?
>
> Sicher, aber wenn man nur ein Binärfile erzeugt, fehlt die Information,
> für welche Adresse es ist.

Ich bestreite doch gar nicht dass hex fürs flashen praktischer ist. Nur 
wird diese nun mal aus einer oder mehreren bins zusammengebaut. Und 
nicht  byte für byte erstellt.
Darum schrieb ich:

> Dann erstelle es als binary und lasse es in hex konvertieren.
Gast #7141193
Lesenswert?

Jörg W. schrieb:
> bei vielen ARMs fängt der Flash erst auf höheren
> Adressen an (0x200000, 0x400000 oder so). Wenn du dafür ein .bin File
> baust, dann hast du da megabyteweise Nullen am Anfang.

Da gibt man üblicherweise den Dateinamen und die Startadresse als 
Kommandozeilenparameter an. Füllbytes sind nicht nötig.
Gast #7141269
Lesenswert?

Stefan ⛄ F. schrieb:

> Da gibt man üblicherweise den Dateinamen und die Startadresse als
> Kommandozeilenparameter an. Füllbytes sind nicht nötig.

Nunja, das Speichermapping kann schon etwas variantenreicher sein als du 
dir offensichtlich vorzustellen vermagst.

Das fängt schon bei so primitiven Sachen wie Bootloader+App auf AVR8 an, 
wo leicht mal einige Dutzend kB "Lücken" entstehen können, aber endet 
damit längst nicht. Bei den richtig großen µC hat man es oft mit einer 
(kleinen) zweistelligen Zahl von Speicherbereichen zu tun, zwischen 
denen es "Lücken" im Bereichen von MB oder sogar GB gibt.

Klar, es ist möglich, für jeden Teilbereich ein extra Image zu erstellen 
und dass dann auf den korrekten Offset zu "brennen". Aber diese Methode 
hat sich eben schon vor Jahrzehnten als viel zu fehlerträchtig 
herausgestellt.

Klar ist da ein Format zu bevorzugen, was mit "Lücken" von Hause aus 
umgehen kann. Sei es z.B. ELF oder HEX. Alles ist besser als dumme 
binary images. Was wohl auch hinreichend erklärt, warum diese Formate 
überhaupt existieren...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren