Ukončovací kódy
Důležité
Toto je dokumentace k Azure Sphere (starší verze). Azure Sphere (starší verze) se vyřazuje 27. září 2027 a uživatelé musí do této doby migrovat do Azure Sphere (integrované). K zobrazení dokumentace k Azure Sphere (integrované) použijte selektor verzí umístěný nad obsahem.
Aplikace vysoké úrovně Azure Sphere může použít ukončovací kódy k vrácení informací souvisejících s místem, kde v kódu došlo k chybě a proč k ní došlo. Ukončovací kód odpovídá hodnotě od 0 do 255, kde 0 označuje úspěch.
Definování a používání ukončovacích kódů v aplikaci
Při definování a používání ukončovacích kódů v aplikaci postupujte podle těchto pokynů:
- Na začátku aplikace vytvořte výstupní proměnnou kódu a inicializujete ji na úspěch (0).
- Vraťte ukončovací kód ze všech funkcí, u kterých došlo k chybě, která způsobila ukončení aplikace. Ukončovací kódy funkce můžou poskytovat podrobné informace o provozních chybách. Například funkce, která odesílá zprávu do aplikace IoT Central, může vrátit kód chyby, který poskytuje podrobnosti o tom, kde došlo k selhání: při vytváření zpráv, připojení IoT, přenosu zpráv atd. Jiná funkce odpovědná za inicializaci periferních zařízení by vrátila jedinečný ukončovací kód, který indikuje selhání s určitým periferním zařízením.
- Pokud je ukončovací kód selhání (nenulový) nastaven nebo vrácen funkcí, ujistěte se, že se okamžitě rozšíří zpět, aby se hlavní funkce vrátila. To způsobí, že aplikace skončí s daným ukončovacím kódem. Operační systém Azure Sphere okamžitě restartuje vaši aplikaci (pokud jste nepoužívali ladicí program s připojenou vývojovou deskou) a pomocí zpráv o chybách můžete diagnostikovat důvod, proč došlo k ukončení.
Zprávy o chybách
Když se aplikace vysoké úrovně ukončí, operační systém Azure Sphere protokoluje ukončovací kód vrácený vaší aplikací a později nahraje zprávu o chybě obsahující tyto informace do služby zabezpečení Azure Sphere každý den. Porovnáním ukončovacího kódu v sestavě chyb s ukončovacími kódy definovanými ve vaší aplikaci můžete často určit umístění a příčinu chyby. Další informace najdete v tématu Interpret AppExits .
RtApps nemůže vrátit data o chybách přímo do služby zabezpečení Azure Sphere. Pokud chcete implementovat sledování chyb v aplikaci RTApp, budete muset sdělit data o chybách z aplikace RTApp na vysoké úrovni pomocí komunikačního mechanismu mezi jádry. Podrobnosti najdete v tématu Komunikace s aplikací vysoké úrovně a Komunikace s aplikací podporující v reálném čase.
Ukázková implementace ukončovacího kódu
Následující fragmenty kódu ukazují ukázku toho, jak můžete začlenit ukončovací kódy do aplikace vysoké úrovně.
Nejprve deklarujte ExitCode
výčet ve vaší aplikaci, který můžete použít k definování všech konkrétních výstupních hodnot kódu. Potom inicializuje globální exitCode
proměnnou do stavu úspěchu (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;
Funkce, které obsahují chybové případy, které by měly ukončit aplikaci, by měly vrátit výčet ExitCode. Pokud dojde k chybě, která by měla aplikaci ukončit, vraťte konkrétní ukončovací kód, který jste pro tento případ definovali. V následujícím příkladu InitPeripheralsAndHandlers
je funkce definována, která inicializuje LED a tlačítko. Pokud dojde k selhání inicializace, vrátí se odpovídající ExitCode
hodnota definovaná výš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;
}
Po inicializaci zůstane aplikace v hlavní smyčce, pokud je globální exitCode
proměnná stále přiřazena počáteční hodnota úspěchu. Pokud jakákoli část hlavní aplikační logiky někdy nastaví exitCode
proměnnou na jinou hodnotu než úspěch, aplikace se přeruší z hlavní smyčky a ukončí se se sadou exitCode
. Operační systém Azure Sphere zaznamená událost ukončení aplikace a odpovídající ukončovací kód v sestavě chyb a pak restartuje vaši aplikaci.
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;
}