Códigos de salida
Importante
Esta es la documentación de Azure Sphere (heredado). Azure Sphere (heredado) se retira el 27 de septiembre de 2027 y los usuarios deben migrar a Azure Sphere (integrado) en este momento. Use el selector de versiones situado encima de la TOC para ver la documentación de Azure Sphere (integrado).
Una aplicación de alto nivel de Azure Sphere puede usar códigos de salida para devolver información relacionada con dónde se produjo el error y por qué se produjo. Un código de salida corresponde a un valor comprendido entre 0 y 255, donde 0 indica que se ha realizado correctamente.
Definición y uso de códigos de salida en una aplicación
Siga estas instrucciones para definir y usar códigos de salida en una aplicación:
- Cree una variable de código de salida e inicialícela para que se complete correctamente (0) al principio de la aplicación.
- Devuelve un código de salida de cualquier función en la que un error ha provocado la salida de la aplicación. Los códigos de salida de la función pueden proporcionar información detallada sobre los errores operativos. Por ejemplo, una función que envía un mensaje a una aplicación de IoT Central podría devolver un código de error que proporciona detalles sobre dónde se produjo el error: en la construcción de mensajes, la conexión de IoT, la transmisión de mensajes, etc. Una función diferente responsable de inicializar periféricos devolvería un código de salida único para indicar un error con un periférico específico.
- Si una función establece o devuelve un código de salida de error (distinto de cero), asegúrese de que se propaga inmediatamente para que se devuelva la función principal . Esto hará que la aplicación salga con el código de salida especificado. El sistema operativo Azure Sphere reiniciará inmediatamente la aplicación (a menos que esté usando el depurador con una placa de desarrollo conectada) y puede usar informes de errores para diagnosticar el motivo por el que se produjo una salida.
Informes de errores
Cuando se cierra una aplicación de alto nivel, el sistema operativo Azure Sphere registra el código de salida devuelto por la aplicación y, posteriormente, carga un informe de errores que contiene esta información al servicio de seguridad de Azure Sphere diariamente. Al comparar el código de salida en el informe de errores con los códigos de salida definidos en la aplicación, a menudo puede determinar la ubicación y la causa del error. Consulte Interpretación de AppExits para obtener más información.
RTApps no puede devolver datos de error directamente al servicio de seguridad de Azure Sphere. Si desea implementar el seguimiento de errores en una RTApp, deberá comunicar los datos de error de rtApp a una aplicación de alto nivel mediante el mecanismo de comunicaciones entre núcleos. Consulte Comunicación con una aplicación de alto nivel y Comunicación con una aplicación con respuesta en tiempo real para obtener más información.
Implementación de código de salida de ejemplo
Los fragmentos de código siguientes muestran un ejemplo de cómo puede incorporar códigos de salida en una aplicación de alto nivel.
En primer lugar, declare una ExitCode
enumeración en la aplicación que puede usar para definir todos los valores de código de salida específicos. A continuación, inicialice una variable global exitCode
en el estado correcto (0).
// Exit codes for this application.
typedef enum {
ExitCode_Success = 0;
ExitCode_Init_LED = 1;
ExitCode_Init_Button = 2;
} ExitCode;
// Initialize the termination state.
static volatile sig_atomic_t exitCode = ExitCode_Success;
Las funciones que contienen casos de error que deben finalizar la aplicación deben devolver una enumeración ExitCode. Si se alcanza un caso de error que debe finalizar la aplicación, devuelva el código de salida específico que definió para ese caso. En el ejemplo siguiente, se define la InitPeripheralsAndHandlers
función , que inicializa un LED y un botón. Si se produce un error en la inicialización, se devuelve el valor correspondiente ExitCode
definido anteriormente.
// Initialize the peripherals and handlers. Return ExitCode_Success if all resources were allocated
// successfully; otherwise another ExitCode value which indicates a specific failure.
static ExitCode InitPeripheralsAndHandler(void)
{
// Open SAMPLE_LED as output.
led = GPIO_OpenAsOutput(SAMPLE_LED);
if (led == -1) {
return ExitCode_Init_LED;
}
// Open SAMPLE_BUTTON as input.
button = GPIO_OpenAsInput(SAMPLE_BUTTON);
if (button == -1) {
return ExitCode_Init_Button;
}
return ExitCode_Success;
}
Después de la inicialización, la aplicación permanece en el bucle principal siempre que la variable global exitCode
siga asignando el valor de éxito inicial. Si alguna parte de la lógica de aplicación principal alguna vez establece la exitCode
variable en un valor distinto de correcto, la aplicación se interrumpirá del bucle principal y se cerrará con el conjunto exitCode
. El sistema operativo Azure Sphere capturará el evento de salida de la aplicación y el código de salida correspondiente en un informe de errores y, a continuación, reiniciará la aplicación.
int main(int argc, char* argv[])
{
exitCode = InitPeripheralsAndHandler();
while (exitCode == ExitCode_Success) {
// Run other application functions within this loop.
// When a function encounters an error, set a corresponding exit code and return from that function.
// This will break out of the while loop if the exit code is not ExitCode_Success.
}
return exitCode;
}