C Programm neustarten

Gast #4664554
Hey,

gibt es ein Befehl in C mit dem man das Hauptprogramm Neustarten kann?

hab es bisher mit einem goto gelöst, find die Methode aber nicht ganz so 
schön. Gibt es da noch andere befehle? bei Return 0; hängt sich alles 
auf. und bei break passiert das selbe da ich im Main Programm bin.
Gast #4664567
Andreas schrieb:
> gibt es ein Befehl in C mit dem man das Hauptprogramm Neustarten kann?

nein.

Vermutlich geht es um eine µC. Da müsste man an die init Adresse 
springen. Mit goto kommt du zwar zum Anfang der Main aber das ist ja 
nicht der anfang vom Programm. (globale Variabel müssen initialisiert 
werden).

Das das kann man mit einen Funktionszeiger erledigen.
#4664576
1
// ungetestet
2

3
#include <setjmp.h>
4

5
static jmp_buf jmp_main;
6

7
void restart(){
8
  longjmp(jmp_main,1);
9
}
10

11
void do_something(){
12
  restart();
13
}
14

15
int main(){
16
  setjmp(jmp_main);
17
  do_something();
18
  return 0;
19
}

Edit: Dabei wird natürlich speicher der mit malloc reserviert wurde, 
etc. nicht wieder freigegeben oder zurückgesetzt. Dazu brauchte man noch 
ein fork()
Gast #4664583
Autsch xD

manchmal kommt man auf die einfachsten Sachen nicht.

Also hab jetzt das ganze Programm in eine große While(1) schleife 
gepackt und kann es per break Neustarten.

wie sieht das ganze den aus, wenn ich den Hardware Reset drücke fängt 
das Programm ja in Zeile:1 an. Momentan starte ich ja nur das 
Hauptprogramm neu, gibt es da auch eine lösung?
Gast #4664603
Eine frage habe ich noch:

wieso bekomme ich Neustart auf der UART beim Auslösen des WD Doppelt 
angezeigt?
1
      
2
uart_output(NEUSTART);
3
uart_output("\r\n");
4
_delay_ms(10);
5
      
6
WDTCR |= (1<<WDE);

setzt ich das WDTCR in eine while-schleife passiert das nicht.
Gast #4664614
ok Fehler gefunden, bzw 2 fehler xD

Falsche Spalte was die Zeit angeht zum auslösen sollte ein 
_delay_us(16400)sein und natürlich erst nach dem der WD aktiviert wird. 
Und nicht davor.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.