www.mikrocontroller.net

Forum: Compiler & IDEs anderes verhalten bootloader beim sprung von applikation


Autor: Joe Die (kosmonaut_pirx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
ich suche nach einer möglichkeit, den bootloader anders zu fahren, wenn
er von der applikation angesprungen wurde.
hintergrund ist, dass in diesem fall kein timeout laufen soll. dieses
soll nur im reset-falle aktiviert werden und ggf. zuschlagen.

derzeit mache ich es über eine variable in der noinit:

int from_appl_jmp _attribute_ ((section (".noinit")));

die ich dann beim sprung aus der applikation setze:

from_appl_jmp = FROM_APPL_MAGIC;
asm volatile ("jmp 0x1E000"); // jmp main bootloader

und in der main des bl angekommen schaue, was sache ist:

if ( from_appl_jmp != FROM_APPL_MAGIC ){
    static S_Start _s_start; // start timer
}
else{
  from_appl_jmp = FROM_APPL_MAGIC + 1; // sram change for next reset
}

das funktioniert zwar, ist aber - imo - sehr sehr unschön. gibt es  vll
einen weg, wie das besser zu bewerkstelligen ist? irq's sind tabu, die
brauche ich.
noch etwas: "jmp 0x1E000" .. wie kann ich an die erste adresse in der
bl-section springen? ich hatte die idee, die irq-vektoren zu verschieben
und dann an 0 zu springen, aber das funktioniert aus mir unbekannten
gründen leider nicht :(

vielen dank im voraus,
schönen sonntag, bye kosmo

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

ich würde das über die Resetquellen im MCUCSR lösen. Dieses löschst du
bevor du den Bootloader anspringst. Wenn dein µC aus dem Reset kommt
ist ein Bit gesetzt und du wartest deinen Timeout ab. Kommt er nicht
aus dem Reset (du hast den BL manuell angesprungen) ist kein Bit
gesetzt -> kein Timeout.

Die Info wo die BL-Section anfängt scheint es in den io-Headern der
avr-libc nicht zu geben. IMHO bleibt dir nichts anderes als die Adresse
im Programm stehen zu haben.

Matthias

Autor: Joe Die (kosmonaut_pirx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gute idee, danke. den start der bl-section kann ich zur not aus den
fuse-bits ausrechnen.

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.