programmausführung beenden

OP #1026591
Lesenswert?

hi,

weiß vielleicht jemand ob es irgendwie möglich ist das laufende programm 
(main())  zu beenden.
dachte bis gerade das sich das Programm alleine beendet mit erreichen 
des "}"-zeichens   des main()-blocks - aber nein , das Prog.  geht 
wieder von vorn los .


 also kA vielleicht gibts da was in der avr-libc oder so was dafür


könnte auch ne funktion rufen die dann endlos läuft aber is bissl 
unelegant möcht ich meinen.
#1026600
Lesenswert?

Der Prozessor rattert einfach weiter. Entweder wird ein Reset ausgeführt 
weil er in ungültige Speicherbereichte zugreift oder er läuft einfach 
durch den speicher bis er wieder vorne ist. Jenachdem welche Architektur 
du benutzt. Ist halt nicht mit einem Windowsprogramm vergleichbar wo 
einfach nach einem return aus main das Programm beendet wird. Wenn du 
das Teil stehenbleiben soll musst du halt ne Endlosschleife am Ende 
machen.
Gast #1026601
Lesenswert?

KOPFKRATZ
Stell das Programm einfach mal hier rein, dann kann auch was dazu gesagt 
werden.
Zwei Beispiele:
1
main()
2
{
3
 printf("HAllo Welt.");
4
}
Gibt einmal "Hallo Welt" aus und beendet sich dann.
1
main()
2
{
3
 while(1)
4
 {
5
  printf("Hallo Welt.");
6
 }
7
}
Gibt unendlich "Hallo Welt" aus.
Wenn es nicht terminiert muß irgendwo eine Endlosschleife drin sein.
Gast #1026602
Lesenswert?

>könnte auch ne funktion rufen die dann endlos läuft aber is bissl
>unelegant möcht ich meinen.

nö ist es nicht!
In der Endlosschleife setzt man gewöhnlich ein "sleep" um Strom
zu sparen.

Klaus
Gast #1026624
Lesenswert?

Wenn Dir eine "leere" Endlosschleife als Endstation Deines Programms 
nicht gefällt, kannst Du auch alle Interrupts deaktivieren und den 
Controller danach mit sleep für immer schlafenlegen:

cli
sleep

Die Sleep-Fähigkeit muss dazu natürlich enabled sein; setz also 
mindestens das "SE"-Bit im MCUSR-Register auf 1, und ggf. noch 
"SM"-Bits.
#1026665
Lesenswert?

Hallo,

@kopfkratzer: Du weißt aber, daß wir hier von Microcontrollern reden?

Die Theorie stimmt, wenn solch ein Programm von einer höheren Ebene 
aufgerufen wird, meist Betriebssystem genannt. Dann kehrt es am Ende 
dorthin zurück und das Betrienssystem hat das Problem, was es wieterhin 
macht.

Ein µC hat aber (meist) kein Betriebssystem, also kann man ihn nur 
irgendwie beschäftigen (mit einer Endlosschleife z.B.) oder schlafen 
schicken.

Da ist nichts unelegantes dran.

while(1) {}

oder

ende: rjmp ende

sind also völlig legitime Lösungen.

Gruß aus Berlin
Michael

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