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
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.
>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.
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 ???
Sorry Travel Rec. war schneller, und hat natürlich Recht. ich meinte @Tom wenn man außer der Portbelegung weitere Interna unbeeinflusst haben will.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.