mikrocontroller.net

Forum: Compiler & IDEs Programm nach reboot fortsetzten


Autor: E. Grass (grasshuepf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich versuche grad ein programm welches ich geschrieben hab, nach dem 
reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Allerdings habe ich keinen ansatz dafür.

hab zwar etwas gegooglet, aber nichts gefunden. vielleicht suche ich ja 
falsch.

Kann mir jemand da behilflich sein???

danke im voraus!

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du uns nicht mal die platform sagst, wird es sehr schwer.

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einer entsprechenden Lochkarte geht das auf einer PDP-11

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben 
(core).

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klaus Wachtler schrieb:
> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben

Scherzkeks :)

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso? Vielleicht hat er so einen.
Zumindest habe ich nichts gegenteiliges gelesen!

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
E. Grass schrieb:
> ich versuche grad ein programm welches ich geschrieben hab, nach dem
> reboot von der stelle fortzusetzten wo der reboot stattgefunden hat.

Dieses Problem ist nicht ganz trivial zu lösen.

Die sicherste Lösung wäre suspend-to-disk. Das ist natürlich kein 
richtiger reboot, aber wenn es dir nur ums Ausschalten und nicht um das 
rebooten in einen neuen Kernel oder so geht die einfachste und sicherste 
Lösung.

Eine weitere Lösung ist das laufende Programm zu "checkpointen". Das ist 
allerdings nicht ganz einfach und generell umstritten ob dies überhaupt 
sinnvoll machbar ist, weil da so viele Parameter mit reinspielen. Für 
Linux gibts eine experimentelle Implementierung von "Checkpoint / 
Restart" (einfach mal danach googlen). Ich würde aber davon eher abraten 
und wo es geht suspend-to-disk einsetzen.

Die dritte Lösung ist natürlich das Programm dahingehend zu ändern, dass 
es den Status abspeichern und von der Festplatte laden kann. Das ist im 
Gegensatz zum OS-basierten checkpointing wesentlich einfacher zu 
implementieren.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobi schrieb:
> Mit einer entsprechenden Lochkarte geht das auf einer PDP-11

Klaus Wachtler schrieb:
> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben
> (core).


Für was es nicht alles einen GCC gibt... ;-)

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst den funktionalen Ablauf deines Programmes nicht als folge von 
Befehlen implementieren, sondern als Statemachine. Dessen Zustand kann 
mann relativ einfach abspeichern. z.B. beim Brownout.
Nach dem Restart wieder einlesen und weiter gehts.
Kann je nach Aufgabe sehr komplex werden.

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist die Frage zu unpräzise. Was ist mit einem "Reboot" gemeint? Es 
ist doch eigentlich die Eigenart eines Reboot-Vorganges, dass das 
Programm eben nicht weiter ausgeführt wird, sondern "von vorn" begonnen 
wird. So gesehen wäre es ein Paradoxon.

Bei einem Mikrocontroller könnte man, wenn er "hängt", statt eines 
Hardware-Resets einen Interrupt nutzen. Der ISR würde diese Information 
ja dann zur Verfügung stehen - solange der Stack noch intakt ist. Die 
ISR könnte die Situation dann analysieren, eventuell das System 
modifizieren und dann die Ausführung an der gleichen Stelle fortsetzen.

Autor: E. Grass (grasshuepf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ansätze von Michael B. und Volker Z. waren schon in der Richtung die 
ich meinte.

Sorry, dass ich etwas unpräzise war.

Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür 
wollte ich ein programm schreiben und ein neustart innerhalb des 
Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb 
meines Programmes der neustart(reboot) aufgerufen wurde.

@Volker Z.: hast du vielleicht eine link wo man mehr dazu lesen kann, 
insbesondere ein teil mit, wie man zustände speichert ?

@Michael B.: es soll kein neuer Kernel rebootet werden.
Es stellt sich für mich noch die Frage, wie ich das Programm welches ich 
geschrieben habe, nach dem neustart automatisch wieder starte.

Vielleicht habt ihr links wo sowas ähnliches zum lesen gibt.

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
E. Grass schrieb:
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.
>
> Es stellt sich für mich noch die Frage, wie ich das Programm welches ich
> geschrieben habe, nach dem neustart automatisch wieder starte.

Das da ist doch ganz einfach lösbar ohne eine einzige Änderung am 
System.
Übergib dem Programm einen Parameter. Wenn der Parameter gesetzt ist, 
machst du halt da weiter wo do weiter machen möchtest.

Für ein automatisches Starten nach dem booten gibt es viele 
Möglichkeiten. Eine Einfache wäre vielleicht ein initscript zu machen.

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
E. Grass schrieb:
> Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen.

Ich frag mich was es da zu testen gibt. Und was nimmst du als Referenz 
beim Testen?

Autor: Volker Zabe (vza)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche nach "Endlicher Automat" oder „Finite State Machine“.

Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
Wo du sie "Neustart fest" speicherst, hängt von deinem System ab 
(eeprom,Fash,SD-Karten, SSD, Harddisk, etc..

RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur 
einen Warmstart machst.

Was für eine system hast Du?

Autor: mar IO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
E. Grass schrieb:
> Ich möchte die Systemuhr/Hardwareuhr meines Systems Linux testen. Dafür
> wollte ich ein programm schreiben und ein neustart innerhalb des
> Programmes aufrufen und dann den Test von dort fortsetzten so innerhalb
> meines Programmes der neustart(reboot) aufgerufen wurde.

Mir ist zwar nicht klar für was Du einen Reboot brauchst, aber ja...

Du möchtest ja an einer bestimmten Stelle in deinem Programm einen 
Reboot machen. Also hast Du somit schon zwei Zustände: normaler 
Programmstart, Programmstart nach reboot. Also musst Du dir den Zustand 
irgendwie merken (z.B. auf die Festplatte speichern). Wenn Du eben dein 
Programm startest, fragst Du den letzten Zustand ab. KDE, Gnome, Xfce 
und wie sie noch alle heißen haben doch sicher einen Autostart-Ordner 
oder der gleichen. Dein Programm legt hier einen symbolischen Link auf 
sich selber an.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus schrieb:

> Klaus Wachtler schrieb:
>> Kein Problem auf allen Rechnern, die einen Ringkernspeicher haben
>> (core).

Das war auch mein erster Gedanke. ;-)

> Für was es nicht alles einen GCC gibt... ;-)

PDP-11 steht offenbar nach wie vor in der Liste der unterstützten
Zielarchitekturen. ;)

Autor: E. Grass (grasshuepf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Volker Zabe schrieb:
> Suche nach "Endlicher Automat" oder „Finite State Machine“.
>
> Der Zustand wird in einer "gewöhnlichen" Variablen gespeichert.
> Wo du sie "Neustart fest" speicherst, hängt von deinem System ab
> (eeprom,Fash,SD-Karten, SSD, Harddisk, etc..
>
> RAM geht auch, wen er nicht beim Neustert überschrieben wird und du nur
> einen Warmstart machst.
>
> Was für eine system hast Du?

Wenn dann müsste ich auf Flash speichern. Ich dachte mir ich ereuge 
einfach eine Datei, lege sie ab und dann wenn das programm durch ist 
lösch ich die datei wirder

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.