ATmega8 BOOTRST ohne Funktion?

Gast #1492204
Hallo,

ich nutze AVR-Studio und habe ein kleines Programm für den ATmega8 
geschrieben, dass ich gerne im Boot-Bereich des Flashs ablegen möchte 
und auch von dort aus direkt nach einem Reset ausführen möchte.

Das Programm lässt nur eine LED blinken. Es funktioniert auch ganz 
prima. Später soll es zu einem Bootloader ausgebaut werden.

Wenn ich jetzt bei den Projekteinstellungen unter "Memory Settings" die 
Zeile "Flash   .text   0xc00 hinzufüge", dann sieht auch die Hex-Datei 
korrekt aus: Der Programmcode liegt nicht mehr am Anfang sondern am Ende 
in der Hex-Datei. Der Bereich vor dem Programmcode ist mit FF gefüllt.

Bei den Fusebits habe ich unter BOOTSZ folgende Einstellung: "Boot Flash 
size=1024 words Boot address=$0C00"

Außerdem setze ich noch den Haken bei BOOTRST.

Leider startet mein Programm nicht.


Meine bisheringe Fehleranalyse:
Ich habe die Einstellung bei "Memory Settings" wieder rückgängig 
gemacht, sodass das Programm wieder am Anfang der Hex-Datei steht.

Wenn ich es jetzt flashe, startet es auch sofort. Und zwar unabhängig 
davon, ob ich BOOTRST gesetzt habe oder nicht.
Das finde ich komisch, da ich erwartet hätte, dass wenn BOOTRST gesetzt 
ist, das Programm nicht startet, da der Einstiegspunkt in einem Bereich 
liegt, der keinen Programmcode enthält.


Danke,
heinz
#1492287
heinz schrieb:

> Wenn ich es jetzt flashe, startet es auch sofort. Und zwar unabhängig
> davon, ob ich BOOTRST gesetzt habe oder nicht.
> Das finde ich komisch, da ich erwartet hätte, dass wenn BOOTRST gesetzt
> ist, das Programm nicht startet, da der Einstiegspunkt in einem Bereich
> liegt, der keinen Programmcode enthält.

Das ist schon ok so. Die FFs dort werden als NOP interpretiert, und am 
Ende vom Flash springt der PC um auf Adresse 0 und dein Programm 
startet.

Blinkt die LED vielleicht mit Hilfe eines Timer-Interrupts?
#1492304
Hast du auch nach dem Programmieren mal kontrolliert, ob der Code 
komplett ist und an der richtigen Stelle gelandet ist? Es gab eine 
AVR-Studio-Version, die wegen eines Bugs das Hex-File nicht korrekt 
programmiert hat, wenn es nicht an 0x0000 angefangen hat.
Gast #1494653
Also bei mir hab ich bei den Linker Options die Zeile
-Wl,--section-start=.text=0x1800
für den Bootloader. Klappt wunderbar damit.
Bei dir müssts dann eben
-Wl,--section-start=.text=0x0C00
sein.
#1494660
Müsste es gerade nicht und vielleicht liegt auch da der Hase im Pfeffer. 
Ich zitiere mal:

> Bei den Fusebits habe ich unter BOOTSZ folgende Einstellung: "Boot Flash
> size=1024 words Boot address=$0C00"

Das sind *Wort*Adressen.  Wird die gcc-Toolchain eingesetzt, müssen die 
Werte verdoppelt werden, Bootgröße ist 2 kBytes, und es kommt 
--section-start=.text=0x1800 heraus.
#1494707
Hazeh Zimmerer schrieb:

>> Bei den Fusebits habe ich unter BOOTSZ folgende Einstellung: "Boot Flash
>> size=1024 words Boot address=$0C00"
>
> Das sind *Wort*Adressen.  Wird die gcc-Toolchain eingesetzt, müssen die
> Werte verdoppelt werden, Bootgröße ist 2 kBytes, und es kommt
> --section-start=.text=0x1800 heraus.

Das AVR-Studio macht diese Verdopplung selber. Man muss also bei den 
"Memory Settings" tatsächlich 0x0c00 eintragen. Und er hat ja auch schon 
bestätigt, dass der Code bei 0x1800 liegt.
Gast #1495212
Kann mir mal einer eine Hex-Datei für den ATmega erstellen, die z.B. 
einen Doppelblitz macht, wenn der Code im Bootloaderbereich ausgeführt 
wird und einen Einzelblitz, wenn der Code im "normalen" Flash ausgeführt 
wird?

So könnte ich die Funktion von BOOTRST überprüfen.

Ich danke im Voraus für die Unterstützung! :-)

P.S.: Die LED hängt an PC1.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.