Cyklický manažer - Cyclic executive

A cyklický manažer[1][2] je alternativou k a operační systém v reálném čase. Je to forma kooperativní multitasking, ve kterém je pouze jeden úkol. Jediný úkol je obvykle realizován jako nekonečná smyčka v main (), např. v C.

Základní schéma je procházet opakující se posloupností činností na stanovené frekvenci (AKA časem spouštěná cyklická exekutiva). Zvažte například příklad souboru vestavěný systém určené k monitorování a teplotní senzor a aktualizovat LCD Zobrazit. Možná bude nutné, aby byl displej LCD zapisován dvacetkrát za sekundu (tj. Každých 50 ms). Pokud je nutné čidlo teploty číst každých 100 ms z jiných důvodů, můžeme zkonstruovat smyčku následujícího vzhledu:

int hlavní(prázdnota){   zatímco (1)   {      // Tato smyčka je navržena tak, aby trvala 100 ms, což znamená      // všechny kroky přidávají až 100 ms.      // Jelikož se jedná o demo kód, nevíme jak dlouho      // předpokládáme, že spuštění proběhne tempRead nebo lcdWrite      // zabere nula času.      // Výsledkem je, že zpoždění jsou odpovědná za plánování / načasování úkolu.      // Čtení teploty jednou za cyklus (každých 100 ms)      aktuální teplota = tempRead();      // Zápis na LCD dvakrát za cyklus (každých 50 ms)      lcdWrite(aktuální);      zpoždění(50);      lcdWrite(aktuální teplota);      zpoždění(50);      // Nyní 100 ms (zpoždění (50) + zpoždění (50) + tempRead + lcdWrite + lcdWrite)      // prošel, takže cyklus opakujeme.   }}

Vnější cyklus 100 ms se nazývá hlavní cyklus. V tomto případě existuje také vnitřní menší cyklus 50 ms. V tomto prvním příkladu nejsou patrné vnější versus vnitřní cykly. Můžeme použít mechanismus počítání k objasnění hlavních a vedlejších cyklů.

int hlavní(prázdnota){   int i == 0;   zatímco (1)   {      // Tato smyčka je navržena tak, aby trvala 50 ms.      // Jelikož se jedná o demo kód, nevíme jak dlouho      // předpokládáme, že spuštění proběhne tempRead nebo lcdWrite      // zabere nula času.      // Protože chceme, aby se tempRead spouštěl pouze každých 100 ms, použijeme      // příkaz if ke kontrole, zda je počítadlo liché nebo sudé,       // a rozhodnout, zda spustit tempRead.      // Čtení teploty každý druhý cyklus (každých 100 ms)      -li ( (i%2) == 0)      {         aktuální = tempRead();      }      // Zápis na LCD jednou za cyklus (každých 50 ms)      lcdWrite(aktuální);      zpoždění(50);      i++;      // Nyní uplynulo 50 ms, takže cyklus opakujeme.   }}

Viz také

Reference

  1. ^ Bruce Powell Douglass (2003). Návrhové vzory v reálném čase: Robustní škálovatelná architektura pro systémy v reálném čase. Addison-Wesley Longman Publishing Co., Inc. str. 232–237. ISBN  0201699567.
  2. ^ Laplante, Phillip A .; Ovaska, Seppo J. (2012). Návrh a analýza systému v reálném čase (4. vydání). Hoboken, NJ: John Wiley & Sons, Inc. str. 84–85, 100–102. ISBN  978-0-470-76864-8.