mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik programmausführung beenden


Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was macht der Prozessor wenn das Programm zu ende ist? Führt er dann 
keine Befehle mehr aus? Wird der Taktgeber abgeschaltet?

Gast

Autor: Re To (toobatch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja ist nur ein temp. testprogramm ... also soll nur durchlaufen  und 
"anhalten" ...

das Prog. macht UART-ausgaben und es stört wenn das mit den ausgaben 
immer wieder von vorn begint.

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Endlosschleife als letzte Anweisung ?

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: kopfkratzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KOPFKRATZ
Stell das Programm einfach mal hier rein, dann kann auch was dazu gesagt 
werden.
Zwei Beispiele:
main()
{
 printf("HAllo Welt.");
}
Gibt einmal "Hallo Welt" aus und beendet sich dann.
main()
{
 while(1)
 {
  printf("Hallo Welt.");
 }
}
Gibt unendlich "Hallo Welt" aus.
Wenn es nicht terminiert muß irgendwo eine Endlosschleife drin sein.

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

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.