Forum: Mikrocontroller und Digitale Elektronik INTEL HEX file aus AVR Studio so richtig?


von AVRli (Gast)


Lesenswert?

Hi!

Ich habe einen Bootloader geschrieben wo man mithilfe des PC ein 
normales Intel HEX file einschreiben kann.

AVR Studio erzeugt mir folgenes fiele...

Ausschnitt:

1 :020000020000FC
2 :020000007DC7BA
3 :02001C00B5C667
4 :02004000E5C613
5 :020028005AC7B5
6 :0200480082C272
7 :02004C00BBC136



Mein Bootloader hängte sich immer an Zeile 5 auf und machte dann MURX.
Grund ist das erst Adresse 40 kommt dann Adresse 28 und dann Addresse 
48.

Da kommt es aus dem Tritt... sollte es nicht der reihe nach gehen?

28
40
48

also...

1 :020000020000FC
2 :020000007DC7BA
3 :02001C00B5C667
4 :020028005AC7B5
5 :02004000E5C613
6 :0200480082C272
7 :02004C00BBC136


dann klappt es auch mit dem einschreiben in den µC...

Hmm, kann es sein das das AVR Studio eine falsche Ausgabe macht oder ist 
es wirklich erlaubt das man mit den Adressen springen kann????


Gruß AVRli...

von holger (Gast)


Lesenswert?

>Hmm, kann es sein das das AVR Studio eine falsche Ausgabe macht oder ist
>es wirklich erlaubt das man mit den Adressen springen kann????

Ob erlaubt oder nicht, es wird einfach so gemacht.

von crazy horse (Gast)


Lesenswert?

da beim Hex-File zu jeder Zeile eine Startadresse angegeben ist, ist die 
Zuordnung eindeutig. Es muss nicht in in der physikalisch aufsteigenden 
Folge angeordnet sein (ist es aber meist). Es wird also an deinem 
Bootlader liegen, der die Daten nicht richtig eintütet.

von Dieter Werner (Gast)


Lesenswert?

> physikalisch aufsteigenden Folge angeordnet sein (ist es aber meist)

Da gibt es leider die abenteurlichsten Verrenkungen.
Der C18 Compiler von Microchip z.B. würfelt die Adressen wie bekloppt 
durcheinander.
Ich hab mir extra ein Sortierprogramm auf'm PC geschrieben um das in die 
passende Reihenfolge zu bügeln da der bootloader das nicht auseinander 
dividiert kriegt.

von AVRli (Gast)


Lesenswert?

Hallo,

danke für die Antworten.
Ok ich muß ehrlich sagen das ich mich darüber wunder das die Adressen 
durcheinander und nicht der Reihe nach vergeben werden dürfen.

Man kann im Bootloader doch nur Pageweise schreiben und wenn die eine 
Adresse dann schon im Bereich der nächsten und die nächste Zeile im 
Bereich der vorherigen ist, wird es interessant... ;-)

Ok ich werde mir eine Sortiertroutine auf dem PC schreiben, das kann ja 
nicht sooo aufregend sein.

Damit ist meine Frage beantwortet und ich weiß nun das ich auf dem PC 
das file so bearbeiten muß das es für meinen Bootloader der der Reihe 
nach geht damit zurecht kommt.

Danke vielmals...
MfG AVRli

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Normalerweise schreibt AVR-Studio die HEX-Files in der aufsteigenden 
Reihenfolge. Wenn Du allerdings wild verteilte .ORG - Instruktionen in 
Deinem Code hast, dann kommt oben Gesehenes dabei heraus. Die typischen 
Hex-Files enthalten außerdem 16 Datenbytes und nicht nur 2.
Dein Bootloader sollte folgendes machen: Anwender-Flash komplett löschen 
(alles "FF"). SRAM-Page-Buffer komplett mit "FF" beschreiben. Ankommende 
HEX-Daten in den Pagebuffer einsortieren, und zwar nur die laut HEX-File 
betroffenen Adressen. Die anderen bleiben "FF". Wenn die 
HEX-File-Adressen die aktuelle Page-Adresse verlassen, Flash-Page 
schreiben. Da gleiche Adressen in einem HEX-File nicht vorkommen, kann 
eine Flash-Page so mehrfach beschrieben werden, da die nicht betroffenen 
Adressen mit "FF" aus dem Buffer überschrieben werden, was an einer 
bereits beschriebenen Flash-Zelle nichts ändert.

von AVRli (Gast)


Lesenswert?

Hi,

in der Tat, es ist wie Travel Rec. es beschrieben hat.
Ich habe bei den Interrupteinsprungadressen mich nicht ganz an die 
Reihenfolge gehalten wie es vorgesehen ist...
1
.org OVF0addr
2
  rjmp  int_TIMER0        ;T/C0 Überlauf-Int.
3
.org OVF2addr
4
  rjmp  int_TIMER2        ;T/C2 Überlauf-Int.

ändert man in...
1
.org OVF2addr
2
  rjmp  int_TIMER2        ;T/C2 Überlauf-Int.
3
.org OVF0addr
4
  rjmp  int_TIMER0        ;T/C0 Überlauf-Int.

und schon stimmt es wieder, super daumenhoch
Dann klappt auch alles, das ist sehr schön.

Ähm was die 16 Byte Breite angeht, die habe ich schon, nur bei den 
ersten sind es halt 2 Byte und da trat der Fehler auf. Deshalb nur die 
Stellen wo der "Fehler" war.

Problem geköst ohne viel Aufwand, nun noch merken das man sich immer 
schön an die Reihenfolge zu halten hat.

:-D


MfG AVRli...

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.