Freigeben über


Exitcodes

Wichtig

Dies ist die Dokumentation zu Azure Sphere (Legacy). Azure Sphere (Legacy) wird am 27. September 2027 eingestellt, und Benutzer müssen bis zu diesem Zeitpunkt zu Azure Sphere (integriert) migrieren. Verwenden Sie die Versionsauswahl oberhalb des Inhaltsverzeichniss, um die Dokumentation zu Azure Sphere (Integriert) anzuzeigen.

Eine Azure Sphere high-level-Anwendung kann Exitcodes verwenden, um Informationen zurückzugeben, die sich auf den Fehler im Code beziehen und warum er aufgetreten ist. Ein Beendigungscode entspricht einem Wert zwischen 0 und 255, wobei 0 den Erfolg angibt.

Definieren und Verwenden von Exitcodes in einer App

Befolgen Sie die folgenden Richtlinien, um Exitcodes in einer App zu definieren und zu verwenden:

  • Erstellen Sie eine Ausgangscodevariable, und initialisieren Sie sie am Anfang der Anwendung auf Erfolg (0).
  • Gibt einen Ausgangscode aus einer beliebigen Funktion zurück, bei der ein Fehler dazu geführt hat, dass die Anwendung beendet wurde. Die Funktionsendpunktcodes können detaillierte Informationen zu Betriebsfehlern bereitstellen. Beispielsweise kann eine Funktion, die eine Nachricht an eine IoT Central-Anwendung sendet, einen Fehlercode zurückgeben, der Details dazu bereitstellt, wo ein Fehler aufgetreten ist: in der Nachrichtenerstellung, ioT-Verbindung, Nachrichtenübertragung usw. Eine andere Funktion, die für die Initialisierung von Peripheriegeräten verantwortlich ist, würde einen eindeutigen Exitcode zurückgeben, um einen Fehler mit einem bestimmten Peripheriegerät anzugeben.
  • Wenn ein Fehlerausgangscode (nonzero) von einer Funktion festgelegt oder zurückgegeben wird, stellen Sie sicher, dass er sofort zurückgesendet wird, damit die Hauptfunktion zurückgegeben wird. Dies führt dazu, dass die Anwendung mit dem angegebenen Exitcode beendet wird. Das Azure Sphere-Betriebssystem startet Ihre Anwendung sofort neu (es sei denn, Sie verwenden den Debugger mit einem verbundenen Entwicklungs board), und Sie können Fehlerberichte verwenden, um den Grund zu diagnostizieren, warum ein Exit ausfällt.

Fehlerberichte

Wenn eine allgemeine Anwendung beendet wird, protokolliert das Azure Sphere OS den von Ihrer Anwendung zurückgegebenen Ausgangscode und lädt später einen Fehlerbericht mit diesen Informationen täglich in den Azure Sphere Security Service hoch. Wenn Sie den Ausgangscode im Fehlerbericht mit den in Ihrer Anwendung definierten Beendigungscodes vergleichen, können Sie häufig den Speicherort und die Ursache des Fehlers ermitteln. Weitere Informationen finden Sie unter Interpret AppExits .

RTApps können keine Fehlerdaten direkt an den Azure Sphere Security Service zurückgeben. Wenn Sie die Fehlernachverfolgung in einer RTApp implementieren möchten, müssen Sie die Fehlerdaten aus der RTApp mithilfe des Inter-Core-Kommunikationsmechanismus an eine allgemeine App übermitteln. Weitere Informationen finden Sie unter "Kommunizieren mit einer allgemeinen Anwendung " und "Kommunizieren mit einer echtzeitfähigen Anwendung" .

Beispiel für die Implementierung des Exit-Codes

Die folgenden Codeausschnitte zeigen ein Beispiel, wie Sie Exitcodes in eine allgemeine Anwendung integrieren können.

Deklarieren Sie zunächst eine ExitCode Enumeration in Ihrer Anwendung, mit der Sie alle spezifischen Ausgangscodewerte definieren können. Initialisieren Sie dann eine globale exitCode Variable auf den Erfolgszustand (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;

Funktionen, die Fehlerfälle enthalten, die die Anwendung beenden sollten, sollten eine ExitCode-Enumeration zurückgeben. Wenn ein Fehlerfall erreicht ist, der die Anwendung beenden soll, geben Sie den spezifischen Beendigungscode zurück, den Sie für diesen Fall definiert haben. Im folgenden Beispiel wird die InitPeripheralsAndHandlers Funktion definiert, die eine LED und eine Taste initialisiert. Wenn eine der beiden Initialisierungen fehlschlägt, wird der oben definierte entsprechende ExitCode Wert zurückgegeben.

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

Nach der Initialisierung bleibt die Anwendung in der Hauptschleife, solange die globale Variable weiterhin dem anfänglichen exitCode Erfolgswert zugewiesen ist. Wenn ein Teil der Hauptanwendungslogik die exitCode Variable jemals auf einen anderen Wert als Erfolg festlegt, wird die Anwendung aus der Hauptschleife ausbrechen und mit dem Satz exitCodebeendet. Das Azure Sphere-Betriebssystem erfasst das App-Exit-Ereignis und den entsprechenden Beendigungscode in einem Fehlerbericht, und starten Sie die Anwendung neu.

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