MULTIX od środka: Różnice pomiędzy wersjami

Przejdź do nawigacji Przejdź do wyszukiwania
Linia 219: Linia 219:
Polecenia kanałowe są przyjmowane w procedurze obsługi przerwania IPOST. Wynikiem przyjęcia polecenia może być zgłoszenie zadania odpowiadającego poleceniu, bądź jego odrzucenie (bo linia nie istnieje, polecenie jest już wykonywane, ...). Po zgłoszeniu zadania obsługa przerwania się kończy, a zadanie podjąć może manager zadań (główny program MULTIX-a).
Polecenia kanałowe są przyjmowane w procedurze obsługi przerwania IPOST. Wynikiem przyjęcia polecenia może być zgłoszenie zadania odpowiadającego poleceniu, bądź jego odrzucenie (bo linia nie istnieje, polecenie jest już wykonywane, ...). Po zgłoszeniu zadania obsługa przerwania się kończy, a zadanie podjąć może manager zadań (główny program MULTIX-a).


= Zadania =
= Zadania liniowe =
 
Zadania są przedmiotem pracy MULTIX-a. Zadanie liniowe opisane jest numerem zadania i numerem linii, której dotyczy. Zadanie może stać się gotowe do podjęcia na skutek różnych zdarzeń, takich jak zgłoszenie polecenia przez MERĘ-400, bądź przerwanie od któregoś z urządzeń zewnętrznych lub timera. Zadania wybierane są do obsłużenia przez manager zadań, który cyklicznie przegląda listę zadań, wybierając (według priorytetów) to, którym należy się zająć.
 
Zadanie aktywne opisuje pole IDZAD, którego kolejne bajty zawierają:
 
* 0-1: adres pola głównego
* 2-3: adres pola zadania
* 4: numer zadania
* 5: numer linii logicznej
 
Etapy, przez które przechodzi zadanie:
 
* zgłoszone (przez MERĘ-400)
* przyjęte (przez obsługę przerwania w MULTIXIE)
* odebrane (podjęte przez task manager)
 
== Zgłoszenie zadania poleceniem liniowym ==
 
Po otrzymaniu polecenia od MERY-400 MULTIX sprawdza, czy może przyjąć polecenie i reaguje odpowiednio do warunków, wysyłając przerwanie odpowiednie dla danego polecenia:
 
* jeśli linii nie ma w konf - przerwanie "brak linii"
* jeśli zadania danego typu jest zgłoszone, ale nie zostało jeszcze odebrane przez manager zadań - przerwanie "odrzucenie polecenia"
* jeśli zadanie w linii jest aktywne - przerwanie "odrzucenie polecenia"
* jeśli zadanie w linii jest zawieszone - przerwanie "odrzucenie polecenia"
* jeśli żadna z powyższych sytuacji nie wystąpiła, zadanie jest zgłaszane:
** opcionalnie pobierany jest argument zadania (dla zadań, które mają argumenty)
** PZGLI dla zadania = 1
** ADPZL[zadanie, linia] |= 1 (zgłoszenie zadania od początku)
 
Przerwanie potwierdzające odebranie polecenia nie jest wysyłane na etapie jego zgłoszenia, a dopiero po odebraniu zadania przez manager zadań.


== Manager zadań ==
== Manager zadań ==


Manager zadań przegląda cyklicznie tablicę zadań wybierając zadanie do wykonania według priorytetu (od najwyższego):
Zadania przechowywane są w dwóch tablicach. Pierwsza z nich, PZGLI, wskazuje, czy zadanie danego typu zostało zgłoszone (dla dowolnej linii). Jest to pierwsze kryterium wyboru zadania, według malejących priorytetów jak w tabeli poniżej:


{| class="wikitable"
{| class="wikitable"
Linia 241: Linia 271:
|}
|}


Manager zadań budzony jest dowolnym innym przerwaniem, a więc również przerwaniami od urządzeń zewnętrznych (innych niż MERA-400). Dzięki temu możliwa jest reakcja na sytuację, kiedy nastąpiła transmisja do/z urządzenia zewnętrznego.
Druga tablica (adres w ADPZL) przechowuje opis stanów wszystkich zadań dla każdej z linii. Dla każdej linii przechowywane są dwa bajty:
 
* bajt zawieszenia - mówi, czy zadanie działa (bit 0 = 1), czy zostało zawieszone (bit 0 = 0), a jeśli tak, to z jakiej przyczyny (bity 7-1)
* bajt warunków - mówi, czy zadanie zostało zgłoszone do obsługi i podaje przyczynę zgłoszenia
 
Po wybraniu typu zadania, przeglądane są bajty warunków wszystkich linie (począwszy od linii A+1, gdzie A jest poprzednio obsługiwaną linią) i wybierana jest linia, która będzie obsługiwana. Priorytetem jest zawartość bajtu warunku (od najwyższego priorytetu):


{| class="wikitable"
{| class="wikitable"
! Oznaczenie !! Wartość !! Opis
! Oznaczenie !! Wartość !! Opis
|-
|-
| - || 00000000 || bezwarunkowo
| - || 00000001 || zadanie zgłoszone poleceniem
|-
| - || 00000001 || niedozwolone
|-
|-
| WAODB || 00000010 || zakończony odbiór
| WAODB || 00000010 || zakończony odbiór

Menu nawigacyjne