www.mikrocontroller.net

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


Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: AVRli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...
.org OVF0addr
  rjmp  int_TIMER0        ;T/C0 Überlauf-Int.
.org OVF2addr
  rjmp  int_TIMER2        ;T/C2 Überlauf-Int.

ändert man in...
.org OVF2addr
  rjmp  int_TIMER2        ;T/C2 Überlauf-Int.
.org OVF0addr
  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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.