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é
- Arduino - populární příklad tohoto paradigmatu
- Smyčka událostí
- Preempce (výpočet)
Reference
- ^ 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.
- ^ 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.