Códigos de salida

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 entre 0 y 255, donde 0 indica éxito.

Definir y usar códigos de salida en una aplicación

Sigue 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 con éxito (0) al inicio de la aplicación.
  • Devuelve un código de salida de cualquier función en la que un error haya provocado la salida de la aplicación. Los códigos de salida de función pueden proporcionar información detallada sobre 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 proporcione detalles sobre dónde se produjo el error: en la construcción de mensajes, conexión a IoT, 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 propague inmediatamente para que la función principal devuelva. Esto hará que la aplicación salga con el código de salida dado. Azure Sphere OS reiniciará inmediatamente la aplicación (a menos que estuviera usando el depurador con un panel de desarrollo conectado) y puede usar informes de errores para diagnosticar el motivo por el que se produjo una salida.

Informes de errores

Cuando sale una aplicación de alto nivel, Azure Sphere OS 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 del 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. Vea Interpretar 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, tendrá que comunicar los datos de error de la RTApp a una aplicación de alto nivel mediante el mecanismo de comunicaciones entre núcleos. Consulte Comunicarse con una aplicación de alto nivel y Comunicarse con una aplicación compatible con tiempo real para obtener más información.

Ejemplo de implementación de código de salida

Los siguientes fragmentos de código muestran un ejemplo de cómo puede incorporar códigos de salida en una aplicación de alto nivel.

En primer lugar, declare una enumeración ExitCode de la aplicación que puede usar para definir todos los valores de código de salida específicos. A continuación, inicializa 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 terminar la aplicación deben devolver una enumeración ExitCode. Si se alcanza un caso de error que debería terminar la aplicación, devolver 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 se asigne el valor de éxito inicial a la variable global exitCode . Si alguna parte de la lógica de aplicación principal alguna vez establece la exitCode variable en un valor que no sea correcto, la aplicación se separará del bucle principal y saldrá con el conjunto exitCode. Azure Sphere OS capturará el evento de salida de la aplicación y el código de salida correspondiente en un informe de errores y 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;
}