mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 BOOTRST ohne Funktion?


Autor: heinz (Gast)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, die LED blinkt folgendemaßen:
while(1)
{
    LED_AN;
    _delay_ms(250);
    LED_AUS;
    _delay_ms(250);
}

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich den Flash auslese, dann sehe ich, dass das Programm definitiv 
an der richtigen Stelle gelandet ist (Adresse 1800).

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
push

Autor: MeinerEiner (Gast)
Datum:

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

Autor: Hc Zimmerer (mizch)
Datum:

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

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja genau. Im AVR-Studio habe ich 0xc00 angegeben und in Hex-File steht 
das dann bei 0x1800.

Autor: heinz (Gast)
Datum:

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

Autor: heinz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
*push.*

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.