40 votos

¿Quién recibe el valor devuelto por main()?

Sé que en los ordenadores, el valor devuelto por el main() función se recibe por el sistema operativo. Pero, ¿qué pasa en la main() función de un microcontrolador?

46voto

GSerg Puntos 33571

En un microcontrolador, main() no es realmente espera que nunca la salida, y el comportamiento si no es definido, por lo que es hasta que la persona que escribió el tiempo de ejecución de C para el microcontrolador. He visto sistemas que:

  • Tiene implícito un bucle alrededor de main(), por lo que si sale, simplemente se llama de nuevo.
  • Tienen un simple "salto-a-sí-mismo" bucle que se ejecuta si main() nunca sale.
  • Simplemente ejecutar el resto de la memoria de código que sigue a la llamada main(). Esto se llama "corriendo en la maleza".

Nunca he visto a uno que en realidad no hace nada en absoluto con el valor devuelto por main(). Si esto es algo que realmente preocupa, entonces usted debe echar un vistazo a, y posiblemente modificar el código fuente de su sistema de C runtime library.

4voto

Maurizio Puntos 87

El lenguaje C estándar que permite la implementación definido variación void main( void ) y esta es la forma habitual en sistemas embebidos - simplemente porque no se espera que regrese.

Si usted mira en la configuración del compilador, por lo general hay un bootstrap fragmento de código, llamado desde el vector de reset, el cual realiza básicos de inicialización (incluyendo por ejemplo el afrontamiento de la inicialización de los valores en las variables) antes de llamar a main().

Esto también (generalmente) dentro de un bucle infinito, o tal vez realizar un restablecimiento, si main() devuelve

0voto

kwesoly Puntos 121

(Como otras respuestas mencionados) depende de su toolchain, pero por ejemplo en GCC main es compilado como otras funciones, por lo que su valor devuelto se almacena en consecuencia a llamar a convenciones (en el brazo que estoy usando justo no con GCC se pondrá a R0 justo antes de volver).

Supongo que es simillar de AVR-GCC, por lo que la secuencia de comandos personalizada puede utilizar este valor después de devoluciones principal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X