Partager via


Codes de sortie

Important

Il s’agit de la documentation Azure Sphere (héritée). Azure Sphere (hérité) prend sa retraite le 27 septembre 2027 et les utilisateurs doivent migrer vers Azure Sphere (intégré) pour l’instant. Utilisez le sélecteur de version situé au-dessus du TOC pour afficher la documentation Azure Sphere (intégrée).

Une application de haut niveau Azure Sphere peut utiliser des codes de sortie pour retourner des informations relatives à l’emplacement où dans le code l’erreur s’est produite et pourquoi elle s’est produite. Un code de sortie correspond à une valeur comprise entre 0 et 255, où 0 indique la réussite.

Définir et utiliser des codes de sortie dans une application

Suivez ces instructions pour définir et utiliser des codes de sortie dans une application :

  • Créez une variable de code de sortie et initialisez-la en cas de réussite (0) au début de l’application.
  • Retourne un code de sortie de n’importe quelle fonction où une erreur a provoqué la sortie de l’application. Les codes de sortie de fonction peuvent fournir des informations détaillées sur les erreurs opérationnelles. Par exemple, une fonction qui envoie un message à une application IoT Central peut renvoyer un code d’erreur qui fournit des détails sur l’endroit où l’échec s’est produit : dans la construction du message, la connexion IoT, la transmission de messages, etc. Une autre fonction responsable de l’initialisation des périphériques retourne un code de sortie unique pour indiquer une défaillance avec un périphérique spécifique.
  • Si un code de sortie d’échec (différent de zéro) est défini ou retourné par une fonction, vérifiez qu’il est immédiatement propagé pour que la fonction principale retourne. Cela entraîne la sortie de l’application avec le code de sortie donné. Le système d’exploitation Azure Sphere redémarre immédiatement votre application (sauf si vous utilisez le débogueur avec une carte de développement connectée) et vous pouvez utiliser des rapports d’erreurs pour diagnostiquer la raison d’une sortie ocurred.

Rapports d'erreurs

Lorsqu’une application de haut niveau se termine, le système d’exploitation Azure Sphere enregistre le code de sortie retourné par votre application, puis charge un rapport d’erreur contenant ces informations quotidiennement dans le service de sécurité Azure Sphere. En comparant le code de sortie dans le rapport d’erreurs aux codes de sortie définis dans votre application, vous pouvez souvent déterminer l’emplacement et la cause de l’erreur. Pour plus d’informations, consultez Interprétez AppExits .

RTApps ne peut pas retourner les données d’erreur directement au service de sécurité Azure Sphere. Si vous souhaitez implémenter le suivi des erreurs dans une application RTApp, vous devez communiquer les données d’erreur de l’application RTApp à une application de haut niveau à l’aide du mécanisme de communication inter-cœurs. Pour plus d’informations, consultez Communiquer avec une application de haut niveau et Communiquer avec une application compatible en temps réel.

Exemple d’implémentation de code de sortie

Les extraits de code suivants montrent un exemple de la façon dont vous pouvez incorporer des codes de sortie dans une application de haut niveau.

Tout d’abord, déclarez une ExitCode énumération dans votre application que vous pouvez utiliser pour définir toutes vos valeurs de code de sortie spécifiques. Ensuite, initialisez une variable globale exitCode à l’état de réussite (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;

Les fonctions qui contiennent des cas d’erreur qui doivent arrêter l’application doivent retourner une énumération ExitCode. Si un cas d’erreur est atteint qui doit mettre fin à l’application, retournez le code de sortie spécifique que vous avez défini pour ce cas. Dans l’exemple ci-dessous, la InitPeripheralsAndHandlers fonction est définie, qui initialise une LED et un bouton. Si une initialisation échoue, la valeur correspondante ExitCode définie ci-dessus est retournée.

// 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;
}

Après l’initialisation, l’application reste dans la boucle principale tant que la variable globale exitCode est toujours affectée à la valeur de réussite initiale. Si une partie de la logique d’application principale définit la variable sur une valeur autre que la exitCode réussite, l’application se détache de la boucle principale et se ferme avec l’ensemble exitCode. Le système d’exploitation Azure Sphere capture l’événement de sortie de l’application et le code de sortie correspondant dans un rapport d’erreur, puis redémarre votre application.

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;
}