www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Jump auf Bootsektor


Autor: Julius Krebs (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


#Ziel
Aus der MainApp heraus soll der Bootsektor gestartet werden.

#Umsetzung
void (*jump_to_bootloader)(void) = (void *)0x7800;
...
cli();
/* Enable change of interrupt vectors */
GICR = (1<<IVCE);
/* Move interrupts to boot Flash section */
GICR = (1<<IVSEL);
jump_to_bootloader();

#Problem
Der Bootsektor wird nicht gestartet, stattdessen erfolgt ein Reset

#Erläuterung
Ist das Bit "Beetsektor enabled" aktiviert, erfolgt der Start des 
Bootsektor problemlos.
Zur zusätlichen Orientierung habe ich den gesamten Inhalt das AVRs in 
beiliegende Hex-Datei kopiert.

#Geräteigenschaften / Konfiguration
- device: mega32
- bootsectorsize: 1024

#Frage
Ist der Jumpbefehl und dessen Adresse korrekt?

Autor: Julius Krebs (julius-krebs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat wirklich keiner eine idee?

Autor: Julius Krebs (julius-krebs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach leute, das kann es doch nicht sein.

Autor: Walter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wird im Bootsektor auch der Stackpointer initialisiert?

Ich kenne die Variante über den Watchdog einen RESET auszulösen
(mit gsetztem BOOTRST Bit)

Autor: 6632 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Julius, ein Jump in den Bootsector ist nicht dasselbe wie ein Reset. 
Falls die Reset Funktionalitaet gewuenscht ist, sollte man den Watchdog 
starten und warten bis der ablaeuft.

Autor: Julius Krebs (julius-krebs)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Walter wrote:
> wird im Bootsektor auch der Stackpointer initialisiert?
Das kann ich leider nicht sagen.

6632 wrote:
> Julius, ein Jump in den Bootsector ist nicht dasselbe wie ein Reset.
Da hast du recht.
Im Atmel Datenblatt steht der Jumpbefehl als Möglichkeit zum 
Bootlaoderstarten an erster Stelle (den gewünschten Effekt wird er also 
haben).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn ich in das "m32def.inc" schaue, dürfte Dein Sprung ins Nirwana 
gehen:

.equ    FIRSTBOOTSTART  = 0x3f00
.equ    SECONDBOOTSTART = 0x3e00
.equ    THIRDBOOTSTART  = 0x3c00
.equ    FOURTHBOOTSTART = 0x3800

Viele wichtige Defines, die Atmel in seinen Includes hat, fehlen leider 
in den Includes des AVR-GCC.


Es ist völlig witzlos, die Interrupts zu verbiegen.
Wenn das Bootprogramm Interrupts braucht, muß es das gefälligst selber 
tun. Beim Start durch Reset sind die ja auch nicht verbogen.

Dagegen ist es aber nötig, alle selber benutzte Interrupts zu disablen, 
sonst hüpft der Bootloader ins Nirwana, wenn er dafür keine Handler hat.
Die UART muß auch disabled werden, könnten ja noch Bytes im 
Empfangspuffer sein, die den Bootloader stören.

Daher wird der Bootloaderstart per Watchdog sehr gerne verwendet, damit 
hat man ohne Aufwand einen sauberen Resetzustand.


Peter

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei mir hat diese Variante funktioniert:

/* external for Bootloader ---------------------- */

typedef void (*pFn)(void);
const pFn Bootloader = (pFn)(0x7810/2);

...

Bootloader();  // exit to Bootloader


ist fast identisch, aber wie hier schon angemerkt wurde stimmte die 
Adresse nicht.

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.