programmausführung beenden

OP #1026591
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
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
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
>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
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
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

Eine eigene Frage? Dieser Thread ist über 18 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.