Forum: Mikrocontroller und Digitale Elektronik Bootloader ohne Ausgänge zurückzusetzen


von Tom (Gast)


Lesenswert?

Hallo,

folgendes Szenario:

Ich würde gerne aus dem laufenden Programm in den bootloader springen, 
dort den flash neu beschreiben und dann wieder ins Hauptprogramm 
springen.

Allerdings dürfen dabei die Zustände der Ausgänge sich nicht verändern 
(high und low pegel müssen bleiben)

Ist das irgendwie möglich? Soweit ich weiß wird ja beim sprung an die 
Adresse 0 nachdem der bootloader fertig ist das Programm ganz normal 
abgearbeitet, also auch alles resettet.


Grüße

Tom

von Peter (Gast)


Lesenswert?

Das könnte schwer werden. Denn du must ja auf jeden Fall bei dem neuen 
Programm was im Flash liegt beim Reset anfangen. Wie willst soll sich 
sonst eine Änderrung in einer Initialierungsfunktion auswirken. 
Ausderdem kann sich ja auch eine Adresse im Ram geändert haben.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Allerdings dürfen dabei die Zustände der Ausgänge sich nicht verändern
>(high und low pegel müssen bleiben)
Das ist das kleinste Problem. Initialisiere im Bootloader einfach die 
Ports nicht und greife nicht auf diese zu. Bei einem echten 
Hardware-Reset (Einschalten, Brown-Out, Watchdog oder externes Reset) 
sind die Ports aber erstmal hochohmige Eingänge, was sich nicht 
verhindern läßt.

>Soweit ich weiß wird ja beim sprung an die
>Adresse 0 nachdem der bootloader fertig ist das Programm ganz normal
>abgearbeitet, also auch alles resettet.

Nein. Beim Sprung auf Adresse $0000 wird nichts zurückgesetzt, was Dein 
Programm nicht selber zurücksetzt. Nur bei einem Hardware-Reset werden 
bestimmte Hardware-Register zurückgesetzt.

von Route_66 (Gast)


Lesenswert?

Da haste Dein Konzept nicht überdacht.
Meine Variante wäre ein eigenes Flash-Ladeprogramm. wo ich vor, während 
und nach dem Neubrennen die Kontrolle aller Ressourcen behalte.
Das kann manchmal ganz schön tricky sein.
Da Du ein Geheimnis um den uC, die Programmierumgebung und Deine 
Fähigkeiten machst, gibts hier nur ???

von Route_66 (Gast)


Lesenswert?

Sorry Travel Rec. war schneller, und hat natürlich Recht.
ich meinte @Tom wenn man außer der Portbelegung weitere Interna 
unbeeinflusst haben will.

von (prx) A. K. (prx)


Lesenswert?

Route_66 wrote:

> Meine Variante wäre ein eigenes Flash-Ladeprogramm. wo ich vor, während
> und nach dem Neubrennen die Kontrolle aller Ressourcen behalte.
> Das kann manchmal ganz schön tricky sein.

Vor allem, weil man hübsch sorgfältig auseinander halten muss, wo 
welcher Programmteil steht und welches RAM verwendet. Denn das RAM vom 
Primärprogramm wird man wohl in jedem Fall nach dem Flashen 
initialisieren müssen, weil sich das Layout ändern kann. Ein Return vom 
Flasher ins Programm geht aus dem gleichen Grund nicht.

von Peter D. (peda)


Lesenswert?

Tom wrote:
> Ich würde gerne aus dem laufenden Programm in den bootloader springen,
> dort den flash neu beschreiben und dann wieder ins Hauptprogramm
> springen.
>
> Allerdings dürfen dabei die Zustände der Ausgänge sich nicht verändern
> (high und low pegel müssen bleiben)

Das ist überhaupt kein Problem, der Bootloader sollte ja alle Pins, die 
er nicht benötigt, auch nicht anfassen.

Du mußt nur den Bootloader direkt anspringen, also nicht über ein 
Watchdogreset.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.