Initiering och avslutning
Viktigt!
Det här är dokumentationen om Azure Sphere (Legacy). Azure Sphere (Legacy) upphör den 27 september 2027 och användarna måste migrera till Azure Sphere (integrerad) vid den här tiden. Använd versionsväljaren ovanför TOC för att visa dokumentationen om Azure Sphere (integrerad).
Vid start bör varje Azure Sphere-program utföra viss initiering:
Registrera en SIGTERM-hanterare för avslutningsbegäranden. Azure Sphere-enhetsoperativsystemet skickar SIGTERM-avslutningssignalen för att indikera att programmet måste avslutas, oftast när en uppdatering väntar, men även som svar på en begäran om enhetsavslutning. Som en del av initieringskoden bör programmet registrera en hanterare för sådana begäranden. Till exempel:
#include <signal.h> ... // Register a SIGTERM handler for termination requests struct sigaction action; memset(&action, 0, sizeof(struct sigaction)); action.sa_handler = TerminationHandler; sigaction(SIGTERM, &action, NULL);
I avslutningshanteraren kan programmet utföra de avstängningsuppgifter som krävs. Avslutningshanterare måste vara POSIX async-signal-safe. I synnerhet får de inte innehålla anrop till
Log_Debug()
. Exempelprogrammen avslutas på fel samt vid mottagandet av avslutningssignalen. Därför ställer dessa program helt enkelt in ett booleskt värde i avslutningshanteraren och utför sedan rensnings- och avstängningsuppgifter efter att huvudloopen har avslutats.Initiera handtag för GPIO-kringutrustning.
Om programmet använder Azure IoT Hub ansluter du till IoT-klienten och registrerar återanropsfunktioner för IoT-funktioner som moln-till-enhet-meddelanden, enhetstvillingstatus och direktmetodanrop.
Vid avslutningen bör programmet stänga kringutrustning, förstöra handtag och frigöra allokerat minne. Programmet har bara två sekunder på sig att avsluta efter mottagandet av SIGTERM-signalen. Om programmet inte har avslutats skickar Azure Sphere OS en SIGKILL-signal som omedelbart avslutar programmet. SIGKILL-signalen bör alltid undvikas. Om programmet rutinmässigt utför åtgärder som kan ta längre tid än två sekunder att slutföra kan du överväga att lägga till en uppskjuten uppdateringsloop i programmet. Program som använder Powerdown-funktionen bör göra all nödvändig rensning innan du anropar power down-API:erna.