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.
Was macht der Prozessor wenn das Programm zu ende ist? Führt er dann keine Befehle mehr aus? Wird der Taktgeber abgeschaltet? Gast
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.
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.
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.
>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
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.