Condividi tramite


Codici di uscita

Importante

Questa è la documentazione di Azure Sphere (legacy). Azure Sphere (legacy) viene ritirato il 27 settembre 2027 e gli utenti devono eseguire la migrazione ad Azure Sphere (integrato) entro questo periodo. Usare il selettore di versione posizionato sopra il sommario per visualizzare la documentazione di Azure Sphere (integrata).

Un'applicazione di alto livello di Azure Sphere può usare i codici di uscita per restituire informazioni correlate alla posizione in cui si è verificato l'errore e al motivo per cui si è verificato. Un codice di uscita corrisponde a un valore compreso tra 0 e 255, dove 0 indica l'esito positivo.

Definire e usare i codici di uscita in un'app

Seguire queste linee guida per definire e usare i codici di uscita in un'app:

  • Creare una variabile di codice di uscita e inizializzarla per l'esito positivo (0) all'inizio dell'applicazione.
  • Restituisce un codice di uscita da qualsiasi funzione in cui un errore ha causato la chiusura dell'applicazione. I codici di uscita della funzione possono fornire informazioni dettagliate sugli errori operativi. Ad esempio, una funzione che invia un messaggio a un'applicazione IoT Central potrebbe restituire un codice di errore che fornisce informazioni dettagliate sulla posizione in cui si è verificato un errore: nella costruzione di messaggi, nella connessione IoT, nella trasmissione dei messaggi e così via. Una funzione diversa responsabile dell'inizializzazione delle periferiche restituisce un codice di uscita univoco per indicare un errore con una periferica specifica.
  • Se un codice di uscita dell'errore (diverso da zero) viene impostato o restituito da una funzione, assicurarsi che venga immediatamente propagato di nuovo per la funzione principale da restituire. In questo modo l'applicazione verrà chiusa con il codice di uscita specificato. Il sistema operativo Azure Sphere riavvierà immediatamente l'applicazione (a meno che non si usasse il debugger con una scheda di sviluppo connessa) ed è possibile usare i report degli errori per diagnosticare il motivo di un'uscita ocurred.

Report di errori

Quando un'applicazione di alto livello viene chiusa, il sistema operativo Azure Sphere registra il codice di uscita restituito dall'applicazione e successivamente carica un report di errore contenente queste informazioni al servizio di sicurezza di Azure Sphere ogni giorno. Confrontando il codice di uscita nel report degli errori con i codici di uscita definiti nell'applicazione, è spesso possibile determinare la posizione e la causa dell'errore. Per altre informazioni, vedere Interpretare AppExits .

RtApps non può restituire i dati di errore direttamente al servizio di sicurezza di Azure Sphere. Se vuoi implementare il rilevamento degli errori in un'applicazione RTApp, dovrai comunicare i dati degli errori da RTApp a un'app di alto livello usando il meccanismo di comunicazione tra core. Per informazioni dettagliate, vedere Comunicare con un'applicazione di alto livello e Comunicare con un'applicazione con funzionalità in tempo reale.

Implementazione del codice di uscita di esempio

I frammenti di codice seguenti illustrano un esempio di come è possibile incorporare i codici di uscita in un'applicazione di alto livello.

Prima di tutto, dichiarare un'enumerazione ExitCode nell'applicazione che è possibile usare per definire tutti i valori del codice di uscita specifici. Inizializzare quindi una variabile globale exitCode nello stato di esito positivo (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;

Le funzioni che contengono casi di errore che devono terminare l'applicazione devono restituire un'enumerazione ExitCode. Se viene raggiunto un caso di errore che deve terminare l'applicazione, restituire il codice di uscita specifico definito per tale caso. Nell'esempio seguente viene definita la InitPeripheralsAndHandlers funzione , che inizializza un LED e un pulsante. Se l'inizializzazione ha esito negativo, viene restituito il valore corrispondente ExitCode definito in precedenza.

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

Dopo l'inizializzazione, l'applicazione rimane nel ciclo principale purché alla variabile globale exitCode sia ancora assegnato il valore iniziale di esito positivo. Se una parte della logica dell'applicazione principale imposta mai la exitCode variabile su un valore diverso dall'esito positivo, l'applicazione si interromperà dal ciclo principale e si chiuderà con il set exitCode. Il sistema operativo Azure Sphere acquisirà l'evento di uscita dell'app e il codice di uscita corrispondente in una segnalazione errori, quindi riavvia l'applicazione.

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