Nasazení aplikace snímače v reálném čase v systému Azure RTOS pro monitorování prostředí místnosti

Dokončeno

Mikrobiologická laboratoř plánuje provést řadu experimentů pro nového zákazníka. Tyto experimenty vyžadují, aby teplota, vlhkost a tlak v laboratoři byly velmi stabilní. Po mnoha šetřeních byl vybrán nový senzor prostředí, který splňuje požadavky zákazníků. Zjistilo se ale, že nový senzor je velmi citlivý na časování a je potřeba ho nasadit do jednoho z jader Azure Sphere v reálném čase.

V této lekci se dozvíte, jak nasadit aplikaci v reálném čase do služby Azure Sphere tak, aby podporovala nový senzor teploty, vlhkosti a tlaku.

Architektura Azure Sphere

Mikrořadič (MCU) Azure Sphere má tři jádra přístupná pro vývojáře – Cortex-A7, na kterém běží jádro Linuxu, a dvě jádra Cortex-M4, která umí spustit holý kód nebo operační systém v reálném čase, jako je například Azure RTOS nebo FreeRTOS.

Aplikace vysoké úrovně běžící na linuxovém jádru Cortex-A7 se používají pro úkoly méně náročné na časování, jako je vytváření síťových připojení, zajišťování zabezpečení, aktualizace stavu zařízení, komunikace s aplikacemi jádra v reálném čase a posílání zpráv telemetrie do cloudových bran, jako je IoT Hub.

Azure Sphere architecture.

Co je RTOS (Real-Time Operating System)

Systém je označován jako „v reálném čase“, pokud celková správnost operace nezávisí jenom na logické správnosti, ale také na čase, kdy se provádí (odkaz na článek Wikipedii).

RTOS je systémový software, který poskytuje služby a spravuje prostředky procesoru pro aplikace. Mezi tyto prostředky patří cykly procesoru, paměť, periferní zařízení a přerušení. Hlavním účelem systému v reálném čase je přidělovat dobu zpracování mezi různé potřeby, které musí vložený software provádět.

To obvykle zahrnuje rozdělení softwaru do částí, které se obvykle nazývají úkoly nebo vlákna, a vytvoření prostředí modulu runtime, které poskytuje každému vláknu vlastní virtuální mikroprocesor (tzv. multithreading). V podstatě se virtuální mikroprocesor skládá z virtuální sady prostředků mikroprocesorů, například z řady registrů, čítače programu, oblasti zásobníku paměti a ukazatele zásobníku. Vlákno používá fyzické prostředky mikroprocesorů pouze během zpracování, ale každé vlákno si uchovává vlastní kopii obsahu těchto prostředků, jako by šlo o vlastní privátní prostředky (kontext vlákna).

Představujeme Azure RTOS

Azure RTOS je operační systém v reálném čase dostupný od Microsoftu. Azure RTOS je vložená sada pro vývoj, jejíž součástí je malý, ale výkonný operační systém s názvem ThreadX, který nabízí spolehlivý a velmi vysoký výkon pro zařízení s omezenými prostředky. Sada Azure RTOS zahrnuje i další komponenty, jako jsou nástroje pro návrh grafického rozhraní (GUI) a knihovny. V této lekci budeme používat systém Azure RTOS ThreadX.

Azure RTOS ThreadX je pokročilý operační systém v reálném čase (RTOS) navržený speciálně pro hluboce vložené aplikace. Nabízí řadu výhod, mezi které patří multithreading v reálném čase, komunikace a synchronizace mezi vlákny a správa paměti. Azure RTOS ThreadX má spoustu pokročilých funkcí, včetně architektury picokernel, preemptivní prahové hodnoty, zřetězení událostí a celé řady systémových služeb.

Proč vytvářet a nasazovat aplikace v reálném čase

K důvodům pro spouštění kódu na jádrech Cortex M4 v reálném čase patří:

  1. Migrujete stávající kód Cortex M4 do služby Azure Sphere.
  2. Vaše aplikace vyžaduje přesné nebo deterministické časování, které nelze zaručit v linuxovém jádru Cortex-A7, kde by muselo soupeřit s jinými službami.
  3. Vaše aplikace může být spuštěná ve více jádrech, aby bylo možné využívat všechny prostředky paměti a prostředků Azure Sphere.

Další informace najdete v průvodci Real-Time Operating System (RTOS) – základní informace a možnosti použití.

Komunikace mezi jádry

Z bezpečnostních důvodů nemohou aplikace běžící na jádrech v reálném čase přistupovat k žádným síťovým prostředkům. Aplikace ale mohou komunikovat s aplikacemi, které běží na jiných jádrech, prostřednictvím zabezpečeného mechanismu poštovních schránek. Musí také existovat sdílený princip nebo kontrakt, který popisuje tvar dat předávaných mezi jádry. Tam, kde je to možné, popište tvar datových zpráv pomocí základních datových typů, jako je C int, float, výčty a znaky. Pro složitější potřeby, jako je například předání pole objektů, bude nutné implementovat schéma serializace.

Následující struktura deklaruje kontrakt mezi jádry použitý v této lekci. Tento kontrakt najdete v adresáři IntercoreContract.

typedef enum
{
    LP_IC_UNKNOWN,
    LP_IC_HEARTBEAT,
    LP_IC_ENVIRONMENT_SENSOR,
    LP_IC_SAMPLE_RATE
} LP_INTER_CORE_CMD;

typedef struct
{
    LP_INTER_CORE_CMD cmd;
    float temperature;
    float pressure;
    float humidity;
    int sample_rate;
} LP_INTER_CORE_BLOCK;

Architektura řešení

Inter-core communications architecture.

Architektura řešení je následující:

  1. Vlákno senzoru prostředí Azure RTOS v reálném čase se spouští každé 2 sekundy. Vlákno ukládá do paměti data o nejnovější teplotě, vlhkosti a tlaku prostředí.
  2. Streamovací aplikace telemetrických dat vysoké úrovně požaduje od jádra v reálném čase nejnovější data prostředí.
  3. Vlákno služby prostředí Azure RTOS v reálném čase odpovídá nejnovějšími daty prostředí.
  4. Aplikace vysoké úrovně serializuje data prostředí jako JSON a pošle zprávu telemetrie do IoT Hubu.
  5. Azure IoT Central odebírá zprávy telemetrie odeslané do IoT Hubu zařízením a zobrazuje data uživateli.
  6. Uživatel služby IoT Central může také nastavit požadovanou teplotu pro místnost nastavením vlastnosti. Tato vlastnost se nastavuje na zařízení prostřednictvím zprávy dvojčete zařízení IoT Hubu.
  7. Azure Sphere pak nastaví režim provozu TVK tak, aby splňoval požadovanou teplotu.

Zabezpečení a komunikace jádra v reálném čase

Stejně jako aplikace vysoké úrovně jsou aplikace v reálném čase ve výchozím nastavení zabezpečené a je nutné deklarovat všechny prostředky, které aplikace vyžaduje. Sem patří přístup k periferiím a aplikacím, se kterými může jádro v reálném čase komunikovat. Aby bylo možné komunikovat, musí mít aplikace běžící v různých jádrech nakonfigurovaná odpovídající ID komponent.

Možnosti použití v různých jádrech v reálném čase

Aby bylo možné komunikovat, musí mít aplikace běžící v různých jádrech nakonfigurovaná odpovídající ID komponent.

ID komponenty pro aplikaci vysoké úrovně se nachází v jejím souboru app_manifest.json.

{
  "SchemaVersion": 1,
  "Name": "AzureSphereIoTCentral",
  "ComponentId": "25025d2c-66da-4448-bae1-ac26fcdd3627",
  ...
}

Vlastnost AllowedApplicationConnections v souboru app_manifest.json v reálném čase je nastavená na ID komponenty aplikace Azure Sphere vysoké úrovně.

{
    ...
    "AllowedApplicationConnections": [ "25025d2c-66da-4448-bae1-ac26fcdd3627" ]
    ...
}