Forum: Mikrocontroller und Digitale Elektronik stdlib.h exit funktion


von quasty (Gast)


Lesenswert?

Guten Tag,
habe in einem gekauften Quellcode bei fehlgeschlagener Initialisierung 
die Funktion exit(1)aufgerufen.
Ich verstehe nicht ganz was genau damit gemacht wird?
Bzw was der Vorteil von dieser Funktion ist?
Wird das Programm abgebrochen oder wird einfach eine Endlosschleife 
aufgerufen?
Vielen Dank für Eure Hilfe

von Peter II (Gast)


Lesenswert?

http://www.cplusplus.com/reference/cstdlib/exit/

wie genau dein System darauf reagiert, kommt auf den System an.

von quasty (Gast)


Lesenswert?

Peter II schrieb:
> wie genau dein System darauf reagiert, kommt auf den System an.

Im meinem Fall ein At90Can128 mit dem Atmelstudio7!

Danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

quasty schrieb:
> Im meinem Fall ein At90Can128 mit dem Atmelstudio7!

By default ist exit() dort eine Endlosschleife.  Kann man aber
auch selbst anders implementieren, falls man bspw. Error-LEDs
blinken lassen will oder dergleichen.

von Clemens L. (c_l)


Lesenswert?

Das kommt auf den Compiler an. Mit gcc (newlib) auch auf die 
Architektur.

Aargh64 z.B. schmeißt eine Exception: 
http://www.sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/aarch64/_exit.c;hb=HEAD
M86K führt "stop #0x700" aus: 
http://www.sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/m68k/fido-_exit.c;hb=HEAD
oder "halt": 
http://www.sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/m68k/cf-exit.c;hb=HEAD
MSP430 versucht, eine Funktion im Simulator aufzurufen; ohne Simulator 
gibt es einen Reset: 
http://www.sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/msp430/syscalls.S;hb=HEAD

und die portable Version: 
http://www.sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=libgloss/libnosys/_exit.c;hb=HEAD
1
  /* Default stub just causes a divide by 0 exception.  */
2
  int x = rc / INT_MAX;
3
  x = 4 / x;
4
5
  /* Convince GCC that this function never returns.  */
6
  for (;;)
7
    ;

In der Praxis sollte man exit() nie aufrufen und den gewünschten Effekt 
selbst programmieren (oder exit() damit ersetzen).

von Peter II (Gast)


Lesenswert?

Clemens L. schrieb:
> Das kommt auf den Compiler an.

der Compiler entscheidet das wohl kaum selber, maximal ist es von der 
Toolchain abhängig.

von Curby23523 N. (Gast)


Lesenswert?

Ohnehin, ist es nicht ziemlich sinnfrei das Programm eines µC zu 
beenden?

von Mark B. (markbrandis)


Lesenswert?

Nils H. schrieb:
> Ohnehin, ist es nicht ziemlich sinnfrei das Programm eines µC zu
> beenden?

Ja, ist es. Etwaige Fehlerzustände kann man genau so gut auch innerhalb 
einer selbst geschriebenen Funktion abhandeln, die von main() aufgerufen 
wird.

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
Noch kein Account? Hier anmelden.