C Programm neustarten

Gast #4664554
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren