RTMON HC 11 Prof. Ing. Vladimír Vašek, CSc.. Charakteristika RTMON Preemptivní systém Samostatný soubor, který se přilinkuje k uživatelským procesům Je.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

CIT Paměti Díl X.
Standardní knihovní funkce pro práci s textovými řetězci
VISUAL BASIC Práce s řetězci Použitá literatura: Kvoch: Visual Basic 4.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Vlastní skript může být umístěn: v hlavičce stránky v těle stránky
Programovací jazyk C++
Cvičení Úloha 1: Rozhodněte zda posloupnost znaků v poli délky n tvoří palindrom (slovo, které je stejné při čtení zprava i zleva). Př.: [a,l,e,l,a] [a,n,n,a]
VISUAL BASIC Práce se soubory.
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
SYSTÉM PŘERUŠENÍ U 68HC11.
Operační systémy. OPERAČNÍ SYSTÉMY pomoc operátorovi, podpora vlastností reálného času, víceuživatelských a více úlohových systémů.
PROGRAM PRO VÝUKU T ČLÁNKU
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
Diagramy případů užití.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Algoritmy I Cvičení č. 3.
Algoritmizace a programování
Zpracování programu programovatelným automatem. Zpracování programu na PA se vykonává v periodicky se opakujícím uzavřeném cyklu, tzv. scanu. Nejprve.
Téma:II-I/1 Dat.komun.-ovládání
SmartPhone start - Apple iPhone
Vzdělávací materiál / DUMVY_32_INOVACE_02B2 Správa procesů AutorIng. Petr Haman Období vytvořeníProsinec 2012 Ročník / věková kategorie2. ročník Vyučovací.
Jazyk vývojových diagramů
Přístupová práva, maska přístupových práv Jiří Hořejší.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
13AMP 6. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument.
Deklarace Radim Štefan. 2 Použité zkratky BP – Borland Pascal De – Delphi.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
C – strukturované příkazy
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Paměťové obvody a vývoj mikroprocesoru
Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003.
Operační systémy Přednášky pro výuku předmětu Operační systémy Ing. Antonín Vaněk, CSc. DFJP, Univerzita Pardubice září 2003.
Současný svět Projekt č. CZ /3. 1
Jazyk vývojových diagramů
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
13AMP 2. přednáška Ing. Martin Molhanec, CSc.. Stav procesu (kontext) Stav procesu je úplná informace, kterou je nutné uschovat při přerušení procesu,
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
2 Ing. Jan Keprt Centrální správa uživatelů 3 Jak to bylo dosud Bylo třeba nastavení uživatelů provést zvlášť, v každém modulu samostatně. Uživatel si.
13AMP 3. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled I. Co je to kontext úlohy Co je to kontext úlohy Task switching (přepnutí úlohy)
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
UNIX Shell skripty Roman Danel VŠB TU Ostrava, Hornicko – geologická fakulta.
3. konzultace (5 hodin) Studijní materiály najdete na adrese:
Vnitřní (operační paměť)
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
Systém souborů. Množina souborů různých typů – Data – Spustitelné programy – Konfigurační a pomocné informace – I/O zařízení Způsob organizace množiny.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
C – procedury Mgr. Lenka Švancarová.
Základy operačních systémů Meziprocesová komunikace a synchronizace Jakub Yaghob.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Uvedení autoři, není-li uvedeno jinak, jsou autory tohoto výukového materiálu a všech jeho částí. Tento projekt je spolufinancován ESF a státním rozpočtem.
Programování mikropočítačů
Programovací jazyk C++
Soubor Soubor v informatice označuje pojmenovanou sadu dat uloženou na nějakém datovém médiu, se kterou lze pracovat nástroji operačního systému jako.
Programování v jazyce C++
Operační systémy 9. Spolupráce mezi procesy
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Správa paměti.
Segmentace Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Číslicové měřící přístroje
Práce s procesy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí Autor:
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Přepínání procesů Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Libor Otáhalík. Dostupné z Metodického portálu ISSN: 
Paměť.
Přednášky z Distribuovaných systémů
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

RTMON HC 11 Prof. Ing. Vladimír Vašek, CSc.

Charakteristika RTMON Preemptivní systém Samostatný soubor, který se přilinkuje k uživatelským procesům Je užíván pomocí služeb  Služby pro práci s procesy  Služby pro práci se schránkami a zprávami Musí být inicializován

Vektor uživatelského procesu (1) NázevDélkaVýznam HDNPRO1Číslo procesu (identifikátor) HDPRIO1Priorita (nejvyšší 1, nejnižší 254), systém si vyhrazuje priority 0 a 255 HDSTAR2Startovací adresa kódu procesu

Vektor uživatelského procesu(2) NázevDélkaVýznam HDSTAC2Adresa dna zásobníku procesu HDSTSZ2Velikost zásobníku HDAKST2Aktuální hodnota ukazatele zásobníku proces

Vektor uživatelského procesu(3) NázevDélkaVýznam HDPCYK2Časová perioda spuštění (počet systémových tiků) HDPTRU2Zbývá period do spouštění (počet systémových tiků) HDPDLY2Zbývá period do konce zastavení (počet systémových tiků) HDSTAT1Stav procesu

Stav procesu (1) STDEF – pouze definován pomocí CRTP STREDY – připraven na spuštění STRUN – běžící STSTOP – pozastavený STABOR – abortovaný STWTIM – čeká na uplynutí času do spuštění

Stav procesu (2) STWCON – čeká na uplynutí času do pokračování STWQF – čeká na zprávu ve schránce, jejíž adresa je v HDSOW STWQE – čeká na uvolnění schránky, jejíž adresa je v HDSOW STOCRT – proces přetekl přes časovou periodu spouštění

Vektor uživatelského procesu(4) NázevDélkaVýznam HDSOW2Adresa schránky na kterou se čeká HDNEXT2Adresa další hlavičky procesu (0000H = poslední hlavička) HDRESV2reserva

Vektor schránky NázevDélkaVýznam QSTAT1Stav schránky QBOX2Obsah schránky

Volání služeb (1) Před voláním služby je nutno naplnit příslušné vstupní registry podle požadavků volané služby. Akumulátor A obsahuje číslo volané služby (pevně dáno) Akumulátor B většinou obsahuje číslo procesu, což je identifikátor vrácený službou CRTP (založení procesu - registrace pro jádro RTMON).

Volání služeb (2) Každá služba vrací nejméně akumulátor A, kde je uložen návratový kód procesu (chyba). Vlastní volání jádra RTMON se provede pomocí instrukce JSR SERV, čímž se předá řízení manažeru služeb.

Seznam návratových kódů služeb (1) NázevVýznam EOKOK, žádná chyba ENSChybné číslo služby ENPChybné číslo procesu (neznámý identifikátor) EQFUSchránka je plná (nelze zapsat do schránky)

Seznam návratových kódů služeb (2) NázevVýznam EQEMSchránka je prázdná (nelze číst ze schránky) ETPFNelze založit další proces, tabulka procesů je plná ETQFNelze založit další schránku, tabulka schránek je plná

POPIS SLUŽEB (1) Služby pro práci s procesy

CRTP - založení procesu Vyplní hlavičku procesu do tabulky hlaviček a regulérně zaregistruje proces pro jádro systému. Nastavuje zásobník procesu a hodnotu jeho aktuálního ukazatele na dno zásobníku. Stav procesu nastaví na „pouze definován“ a vyplní proměnnou HDSTAR ve vektoru procesu startovací adresou procesu. Vrátí identifikátor procesu, kterým se odkazují ostatní služby na daný proces. Je možno založit až 20 procesů (bez úpravy).

STRP – spuštění procesu Spustí založený proces buďto jednorázově nebo s periodickým spouštěním. Při periodickém spouštění musí uživatel zaručit, že proces bude dokončen do doby dalšího možného spuštění. Pokud tato situace přece jen nastane, bude proces vyloučen z dalších rozhodování jádra a obdrží status STOVRT. Při definovaném pozastavení do prvního spuštění nejsou odpočítávány tiky procesu v periodě spouštění. Proces počká až uplyne doba do spuštění, spustí proces a začne odpočítávat tiky do dalšího spuštění.

DLYP – pozastavení procesu Pozastaví další zpracování procesu buďto na neurčito nebo na zadanou dobu. Je-li pozastavení časově omezeno, proces pokračuje po uplynutí časového intervalu. Není-li časově omezeno, nemůže proces již dále pokračovat dokud jiný proces nespustí službu CONP

CONP – pokračování procesu Povolení dalšího zpracování procesu pozastaveného službou DLYP. Má-li pokračovat proces s vyšší prioritou, dostane ihned přidělen procesor, v jiném případě musí počkat, až budou uspokojeny ostatní procesy s vyššími prioritami.

CHPP – změna periody spouštění Změní periodu spouštění u periodicky spouštěných procesů. Lze s výhodou využít pro zastavení dalšího periodického spouštění nebo pro zahájení spouštění s novou periodou. Je nutno mít na paměti, že programátor aplikace musí zaručit ukončení procesu do příchodu dalšího požadavku na spuštění

STOP – zakončení procesu Slouží k zakončení práce procesu. Musí být na konci každého procesu! Provádí regulérní korekci dat vektoru procesu. Pokud nebude proces před předáním procesoru jádru systému ukončen touto službou, bude systém zablokován bez šance k regulérnímu obnovení práce bez resetu mikropočítače.

ABRP – abort procesu Provede symbolické vyřazení procesu z tabulek systému. Je-li periodicky spouštěn musí být perioda spouštění před službou ABRP vynulována pomocí služby CHPP! Programátor by po použití služby ABRP neměl provádět s daným procesem žádné další operace. Tato služba nemá v RTMON HC11 tak výrazně nutné uplatnění jako v jiných systémech reálného času, jelikož se programy nemohou do mikropočítače zavádět dynamicky a není tedy třeba uvolňovat paměť jiným aplikacím.

POPIS SLUŽEB (2) Služby pro práci se schránkami a zprávami

CRTQ – založení schránky Založí schránku pro výměnu dat mezi procesy a vrátí identifikátor schránky, kterým se odkazují ostatní procesy na tuto datovou strukturu. Schránka má velikost 2 byty a je možno založit až 20 schránek

WRTQ – zápis do schránky bez čekání Zapíše informace z registru IY do schránky určené identifikátorem bez čekání na volnou schránku. Je -li ve schránce stará zpráva, bude přepsána a vrácen kód chyby EQFU

WRWQ – zápis s čekáním na volnou schránku Zapíše informace z registru IY do schránky určené identifikátorem s čekáním, dokud je ve schránce stará zpráva. Po dobu čekání není procesu přidělován procesor

REDQ – čtení ze schránky bez čekání Čte zprávu ze schránky. Je-li schránka prázdná, vrací zprávu 0000H a kód chyby EQEM

RDWQ - čtení s čekání na zprávu Čte zprávu ze schránky. Pokud je schránka prázdná, čeká až bude naplněna některým z procesů.

DELQ – zrušení schránky Symbolicky zruší schránku. Musí být zajištěno, že v okamžiku rušení již schránka není používána žádným procesem.

Přehled služeb (1) ZKRATKANÁZEVPARAMETRY CRTPZaložení procesu A=1, B=priorita IX=adresa počátku procesu IY= velikost zásobníku Vrací: A = chyba, B = číslo procesu (identifikátor) STRPSpouštění procesu A=2, B=číslo procesu IX=počet tiků systému do startu procesu (0=bez čekání) IY= perioda spouštění procesu (0=není periodicky spouštěn) Vrací: A = chyba

Přehled služeb (2) ZKRATKANÁZEVPARAMETRY DLYP pozastaveníA=3, B = číslo procesu IX = počet tiků pozastavení procesu ( 0 = neomezeně) Vrací: A = chyba CONP Pokračování procesu A=4, B = číslo procesu Vrací: A = chyba CHPP Změna periody spouštění A=5, B = číslo procesu IX = nová perioda spouštění Vrací: A = chyba

Přehled služeb (3) ZKRATKANÁZEVPARAMETRY STOPZakončení procesu A = 6, B = číslo procesu Vrací: A = chyba ABRPAbort procesu A = 7, B = číslo procesu Vrací: A = chyba CRTQZaložení schránky A = 8 Vrací: A = chyba, IX = adresa schránky

Přehled služeb (3) ZKRATKANÁZEVPARAMETRY WRTQZápis do schránky A=10 IX = adresa schránky IY = obsah zprávy Vrací: A = chyba WRWQZápis s čekáním na volnou schr. A=10 IX = adresa schránky IY = obsah zprávy Vrací: A = chyba

Přehled služeb (4) ZKRATKANÁZEVPARAMETRY REDQČtení ze schránky A = 11 IX = adresa schránky IY = obsah zprávy vrací: A = chyba RDWQČtení s čekáním na příchod zprávy A = 12 IX = adresa schránky IY = obsah zprávy vrací: A = chyba

Seznam systémových proměnných (1) AKTHEDAdresa hlavičky právě běžícího procesu AKTPRIOPriorita právě běžícího procesu AKTNUMČíslo aktivního procesu MEMADRAdresa 1 byte volné paměti pro alokaci schránek TIMRTMPočet tiků od startu jádra RTMONu MSNMaximální přípustné číslo služby

Seznam systémových proměnných (2) NUMHEDDalší volné číslo procesu NUMQUEDalší volní číslo schránky TPNXAdresa dalšího volného záznamu v tabulce hlaviček TQNXAdresa dalšího volného záznamu v tabulce schránek TSNXAdresa volné adresy v oblasti zásobníků pro alokaci

Seznam systémových proměnných (3) TPSRCVelikost jednoho záznamu v tabulce hlaviček CYKNXUkazatel na další volný byte v CYKL TPLSAdresa poslední hlavičky procesu v tabulce hlaviček

Systémové tabulky TABHEDTabulka hlaviček procesů (max.20) TABQUETabulka schránek (ma.20) TABSRVTabulka adresa služeb (zatím 13) STACKProstor pro zásobníky (20 zásobníků po 32 bytech – lze dynamicky měnit velikost jednotlivých zásobníků, ale nesmí se překročit průměr 32 na jeden).

Mapa paměti (1) NÁVĚŠTÍPOPIS TABHEDTabulka 20 uživatelských vektorů procesů TABQUETabulka 20 uživatelských schránek TABSRVTabulka adres služeb (pro manažer služeb) STACKSOblast pro 20 zásobníků uživatelských procesů

Mapa paměti (2) NÁVĚŠTÍPOPIS TABCYKTabulka pro vyhodnocení cyklického přepínání procesů AKTHED Počátek bloku systémových proměnných RTSTRT Startovací rutina systému RTEND Ukončovací rutina systému DUMMYVytěžovací proces systému

Mapa paměti (3) NÁVĚŠTÍPOPIS TIKPodprogram obsluhy přerušení od obvodu reálného času JADRORutina zajišťující přepínání a řízení procesů SERVManažer služeb FNDTPHRutina pro hledání adresy vektoru procesu podle čísla procesu

Mapa paměti (4) NÁVĚŠTÍPOPIS CRTPSlužba založení procesu STRPSlužba nastartování procesu DLYPSlužba pozastavení procesu CONPSlužba ukončující pozastavení pro. CHPP Služba změny periody spouštění pro. STOP Služba zastavení procesu ABRP Služba zrušení procesu

Mapa paměti (5) NÁVĚŠTÍPOPIS CRTQSlužba založení schránky WRTQSlužba zápisu dat do schránky bez čekání WRWQSlužba zápisu dat do schránky s čekáním REDQSlužba čtení dat ze schránky bez čekání RDWQSlužba čtení dat ze schránky s čekáním

Mapa paměti (6) NÁVĚŠTÍPOPIS DELQSlužba zrušení schránky QSERVRutina zajišťující synchronizaci schr. DINITOvladače displeje (Mesit) RTCINIT Ovladače obvodu reálného času (Mesit) MAINBlok uživatelských procesů NEMADRUkazatel na první volný byte paměti

Demonstrační příklad programu v reálném čase Hlavní program

MAINJSRRTSTRT Inicializace RTMONu a jeho spuštění LDAA#$01 Vyplnění hlavičky procesu 1 LDAB#05 priorita LDX#PROC1 Adresa začátku zásobníku LDY#32 Velikost zásobníku JSRSERV STABIDE1 Uschová čísla procesu Hlavní program (1)

LDAA#$01 Vyplnění hlavičky procesu 2 LDAB#05 Priorita LDX#PROC2 Adresa začátku procesu LDY#32 Velikost zásobníku JSRSERV STABIDE2 Uschová čísla procesu Hlavní program (2)

Hlavní program (3) LDAA#$02 Spuštění procesu 1 LDABIDE1 Identifikátor LDX#$0000 Tiků do startu LDY#$0004 Perioda spuštění JSRSERV Start procesu

Hlavní program (4) LDAA#$02 Spuštění procesu 2 LDABIDE2 Identifikátor LDX#$0000 Tiků do startu LDY#$0008 Perioda spuštění JSRSERV Start procesu

Hlavní program (5) LDAA#$03 Služba DLYP LDAB#$00 Pozastavení hlavního programu LDX#$0000 neomezeně JSRSERV Za touto instrukcí bude pokračovat JSRRTEND Ukončení práce jádra RTMONu RTS

Blok identifikátorů použitých procesů IDE1FCB0číslo procesu 1 IDE2FCB0číslo procesu 2

Procesy (1) Kód procesu P1, používá lokální proměnnou PROM1 PROC1JSRdline1Na řádek 1 vypisuje proměnnou PROM1 LDAA#’1’ JSRdouta LDAAPROM1 JSRdouta

Procesy (2) LDAAPROM1 CMPA#’Z’ BEQL1 INCA L2STAAPROM1 LDAA#$06Služba STOP LDABIDE1 JSRSERV

Procesy (3) L1LDAA#’A’ BRAL2 PROM1FCB‘A’Lokální proměnná * Kód procesu P2, používá lokální proměnnou PROM1

Procesy (4) PROC2JSRdline2Na řádek 2 vypisuje proměnnou PROM1 LDAA#’2’ JSRdouta LDAAPROM2 CMPA#’Z’ BEQL3 INCA

Procesy (5) L4STAAPROM2 LDAA#$06Služba STOP LDABIDE2 JSRSERV L3LDAA#’A’ BRAL4 PROM2FCB‘A’Lokální proměnná

Programový systém DEMORTM(1) Systém pracuje s pěti procesy: PROCES 1: Je periodicky spuštěn, vypisuje na obrazovku vzestupnou posloupnost čísel od 1 do 5. Po dosažení čísla 5 se čítá znovu od 1. V případě lichého čísla pošle zprávu Z1 pro PROCES 3. V případě sudého čísla posílá zprávu Z2 pro PROCES 4. Perioda spouštění: 5 s = 91 tiků Priorita procesu: 20

PROCES 2: Jednorázově spouštěn. Po spuštění vypisuje na obrazovku znak „ G “ a pozastaví se na 3 s. Po znovuspuštění znak vymaže. Perioda spouštění: jednorázové spouštění Priorita procesu: 3 Programový systém DEMORTM(2)

PROCES 3: Čeká na zprávu od PROCESu 1, když ji obdrží vypisuje znak „ 3 “ a spustí jednorázově PROCES 2. Perioda spouštění: jednorázové spouštění Priorita procesu: 3 Programový systém DEMORTM(3)

PROCES 4: Čeká na zprávu od PROCESu 1, když ji obdrží vypisuje znak „ 4 „ a spustí jednorázově PROCES 2. Perioda spouštění: jednorázové spouštění Priorita procesu: 15 Programový systém DEMORTM(4)

PROCES 5: Proces pro obsluhu spouštění a zastavování procesů 1, 2, 3, 4. Spouštění se děje zadáním znaku „ G „ a čísla procesu, zastavování je obdobné, zadáním znaku „ S “ a čísla procesu. Pro ukončení programu se zadá znak „ E „ a počítač se vrátí zpět do prostředí MS DOSu. Programový systém DEMORTM(5)

PROCES 5 - pokračování Při spuštění procesu se vypisuje na spodním řádku „PROCES i“ což signalizuje, že příslušný proces byl spuštěn, po jeho zastavení signalizace zmizí. Perioda spouštění: jednorázové spouštění Priorita procesu : 29

Program (1) # include IDPROC *proces_1_id, *proces_2_id, *proces_3_id, *proces_4_id, *proces_5_id, *init_id; IDQUEUE *S1, *S2;

Program (2) voidproces_1 ( void ); voidproces_2 ( void ); voidproces_3 ( void ); voidproces_4 ( void ); voidproces_5 ( void ); intprint ( int x, int y, char *str,...); voidmain ( void ) { rtm_init (&init_id);

Program (3) rtm_create_p ("PROCES1", 20, proces_1, 1000, &proces_1_id); rtm_create_p ("PROCES2", 3, proces_2, 1000, &proces_2_id); rtm_create_p ("PROCES3", 23, proces_3, 1000, &proces_3_id); rtm_create_p ("PROCES4", 15, proces_4, 1000, &proces_4_id); rtm_create_p ("PROCES5", 29, proces_5, 1000, &proces_5_id); rtm_create_q ("S1", 1, 1, &S1); rtm_create_q ("S2", 1, 1, &S2); rtm_start_p (proces_5_id, 0L, 0L); rtm_delay_p (init_id, 0L);

Program (4) rtm_ch_period_p(proces_1_id,0); rtm_stop_p (proces_1_id); rtm_stop_p (proces_2_id); rtm_stop_p (proces_3_id); rtm_stop_p (proces_4_id); rtm_stop_p (proces_5_id);

Program (5) rtm_abort_p (proces_1_id); rtm_abort_p (proces_2_id); rtm_abort_p (proces_3_id); rtm_abort_p (proces_4_id); rtm_abort_p (proces_5_id);

Program (6) rtm_end (init_id); clrscr(); printf(" Porgram DEMORTM ukoncen \n"); } voidproces_1 ( void ) { staticinti=1; charsprava1='3'; charsprava2='4';

Program (7) print(1,7,"Proces 1 : %d",i); if(i%2) { rtm_write_q(S1,&sprava1); } else{ rtm_write_q(S2,&sprava2); }

Program (8) i++; if(i==6)i=1; rtm_stop_p(proces_1_id); } voidproces_2 ( void ) { print(1,8,"Proces 2 : G"); rtm_delay_p( proces_2_id, 54L); print(1,8," ");

Program (9) rtm_stop_p(proces_2_id); } voidproces_3 ( void ) { staticinti=0; charsprava; print(1,9,"Proces 3 : "); rtm_read_q_w ( S1, &sprava );

Program (10) if(i) print(1,9,"Proces 3 : 3 "); else print(1,9,"Proces 3 : 33"); i=!i; rtm_start_p(proces_2_id, 0L, 0L ); print(1,9," "); rtm_stop_p ( proces_3_id ); } voidproces_4 ( void ) { staticinti=0; charsprava;

Program (11) print(1,10,"Proces 4 : "); rtm_read_q_w ( S2, &sprava ); if(i) print(1,10,"Proces 4 : 4 "); else print(1,10,"Proces 4 : 44"); i=!i; rtm_start_p(proces_2_id, 0L, 0L ); print(1,10," "); rtm_stop_p(proces_4_id); }

Program (12) voidproces_5 ( void ) { intsluzba; intproces; clrscr(); printf("Demonstracni program pro RTMON"); while(1) {

Program (13) while(1) { gotoxy(1,3); printf("Zadej sluzbu : "); clreol(); sluzba=getche(); switch(sluzba) { case'G' : case'g' :

Program (14) case'G' : case'g' : gotoxy(1,4); printf("Spusti proces : "); clreol(); proces=getche(); gotoxy(1,4); clreol(); switch(proces) {

Program (15) { case '1' : rtm_start_p(proces_1_id,0L,91L); break; case '2' : rtm_start_p(proces_2_id,0L,0L); break; case '3' : rtm_start_p(proces_3_id,0L,0L); break;

Program (16) case '4' : rtm_start_p(proces_4_id,0L,0L); break; default : putch(7); } break;

Program (17) case'S' : case's' : gotoxy(1,4); printf("Zastav proces : "); clreol(); proces=getche(); gotoxy(1,4); clreol(); switch(proces) {

Program (18) case '1' : rtm_ch_period_p(proces_1_id,0); rtm_stop_p(proces_1_id); print(1,7," "); break; case '2' : rtm_stop_p(proces_2_id); print(1,8," "); break;

Program (19) case '3' : rtm_stop_p(proces_3_id); print(1,9," "); break; case '4' : rtm_stop_p(proces_4_id); print(1,10," "); break; default : putch(7); } break;

Program (20) case'E' : case'e' : rtm_continue_p(init_id); break; default : putch(7); }

Program (21) intprint ( int x, int y, char *str,...) { int_x,_y; va_list argptr; int cnt; // uchovam kurzor _x=wherex(); _y=wherey(); // nastavym kurzor gotoxy(x,y);

Program (22) // poslu zasobnik do funkce vprintf va_start(argptr, str); cnt = vprintf(str, argptr); va_end(argptr); // vratim kurzor gotoxy(_x,_y); return(cnt); }