Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

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.

Podobné prezentace


Prezentace na téma: "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."— Transkript prezentace:

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

2 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

3 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

4 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

5 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

6 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í

7 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í

8 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

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

10 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).

11 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.

12 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)

13 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á

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

15 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).

16 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í.

17 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

18 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.

19 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í

20 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.

21 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.

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

23 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

24 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

25 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

26 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

27 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ů.

28 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.

29 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

30 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

31 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

32 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

33 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

34 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

35 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

36 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

37 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).

38 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ů

39 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

40 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

41 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

42 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

43 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

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

45 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)

46 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)

47 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

48 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

49 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

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

51 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

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

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

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

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

56

57 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

58 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)

59 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)

60 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)

61 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)

62 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

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

64 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);

65 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);

66 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);

67 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);

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

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

70 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," ");

71 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 );

72 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;

73 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); }

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

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

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

77 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;

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

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

80 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;

81 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;

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

83 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);

84 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); }


Stáhnout ppt "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."

Podobné prezentace


Reklamy Google