Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 2. Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań

Podobne dokumenty
Wyjątki - wprowadzenie

Ada pakiety ogólna struktura

Mechanizmy komunikacji. spotkania symetryczne (język CSP) spotkania asymetryczne (Ada) przestrzenie krotek (Linda) potoki, komunikaty i kanały (Unix)

Wstęp do programowania 2

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

Programowanie systemów czasu rzeczywistego laboratorium. Ćwiczenie 1

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Ada-95. Dariusz Wawrzyniak

Wstęp do programowania

Programowanie w Turbo Pascal

Wprowadzenie do programowania współbieżnego

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Komputerowe systemy sterowania

Programowanie współbieżne Zadanie nr 4 Spotkania

Programowanie współbieżne i rozproszone - Ada. EAIiE Katedra Automatyki

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Tworzenie raportów XML Publisher przy użyciu Data Templates

15. Funkcje i procedury składowane PL/SQL

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Klasy i obiekty cz II

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Programowanie strukturalne

Układy reprogramowalne i SoC Język VHDL (część 4)

Procedury i funkcje składowane

Ilość cyfr liczby naturalnej

Materiały. Technologie baz danych. Plan wykładu Kursory. Wykład 5: Kursory jawne. Podprogramy. Kursory jawne. Kursory niejawne

Wstęp do programowania 2

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Semafory. - aktywne oczekiwanie =GRGDWNRZ\PZVSDUFLHPVSU]WRZ\P 6SHFMDOQDLQVWUXNFMDPDV]\QRZDUHDOL]XMFDDWRPRZ\]DSLVL odczyt, np.

Język programowania PASCAL

Zaawansowane aplikacje internetowe

Programowanie obiektowe

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Pakiety podprogramów Dynamiczny SQL

SQL 4 Structured Query Lenguage

PL/SQL. Zaawansowane tematy PL/SQL

Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne

Aplikacje w środowisku Java

Zajęcia P2AM. Analizator składniowy (Flex + Bison, Linux)

Ingerencja w kod systemu operacyjnego (przerwania) Programowanie na niskim poziomie (instrukcje specjalne) Trudności implementacyjne (alg.

Klient-Serwer Komunikacja przy pomocy gniazd

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Układy reprogramowalne i SoC Testbenches. Symulacja sterowana zdarzeniami.

Język PL/SQL Procedury i funkcje składowane

Tworzenie własnych komponentów

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Klasyczne problemy współbieżności. Problem producenta i konsumenta Problem czytelników i pisarzy Problem pięciu filozofów

Wstęp do programowania 2

synchronizacji procesów

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Semafory. // G - globalna dla wszystkich. // Wada - aktywne oczekiwanie Test_and_Set(Li); exit when Li = 0; end loop sekcja_krytyczna(i); G := 0;

synchronizacji procesów

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Podstawy Programowania 2

Instrukcje cykliczne (pętle) WHILE...END WHILE

Podstawy Programowania semestr drugi. Wykład czternasty

Obowiązuje od wersji

Systemy operacyjne. Zajęcia 11. Monitory

Wstęp do Programowania, laboratorium 02

Plan wykładu BAZY DANYCH II WYKŁAD 7. Pakiety. Zalety pakietów

Programowanie obiektowe

Proces z sekcją krytyczną. Synchronizacja procesów. Synchronizacja procesów, cd. Synchronizacja procesów, cd. Synchronizacja procesów, cd

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Podstawy Programowania

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Elementy języka VHDL. obiekty typy danych atrybuty pakiety i biblioteki instrukcje współbieżne instrukcje sekwencyjne. PUE-w3 1

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Programowanie strukturalne i obiektowe. Funkcje

Projekt prostego procesora

Wstęp. Ale po co? Implementacja

Zaawansowane aplikacje internetowe

Wyzwalacze. Anna Fiedorowicz Bazy danych 2

Język PL/SQL Pakiety podprogramów

Struktury danych (I): kolejka, stos itp.

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Wielowersyjne metody synchronizacji transakcji

Propozycje zadań projektowych

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Modelowanie złożonych układów cyfrowych (1)

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

Jerzy Nawrocki, Wprowadzenie do informatyki

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Monitory. Wady semafora

Laboratorium 15: Bazy Danych Tworzenie bazy danych i programowanie elementów nawigacyjnych aplikacji stworzonej przy pomocy technologii dbexpress

Bloki anonimowe w PL/SQL

Unity 3D - pierwsze skrypty

Zasady Programowania Strukturalnego

NS-2. Krzysztof Rusek. 26 kwietnia 2010

Zaawansowane bazy danych i hurtownie danych semestr I

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Transkrypt:

Programowanie systemów czasu rzeczywistego laboratorium Ćwiczenie 2 Temat zajęć: pakiety, zadania, synchronizacja czasowa, mechanizm spotkań Autor: dr inż. Sławomir Samolej Zagadnienie 1. (Przykładowe programy) Uruchomić przykładowe programy: --- -- Implementacja pakietu -- plik stack.ads: package Stack is procedure Push(X:Integer); function Pop return Integer; end Stack; -- plik stack.adb: package body Stack is size: constant := 100; A: array(1..size) of Integer; Top: Integer range 0..Size; procedure Push(X: Integer) is If Top = size then return; end if; Top:=Top + 1; A(Top):=X; end Push; function Pop return Integer is Top:= Top - 1; return A(Top+1); end Pop; Begin top:=0; -- nadanie wartości poczatkowej end Stack; -- plik main.adb: with Ada.Float_Text_IO; use Ada.Float_Text_IO; with stack; use Stack; procedure main is M: Integer :=12; L: Integer :=125;

Push(M); Push(L); Put(Pop); Put(pop); end Main; -------------------------------------------------------------------------- -- Zadania prosta synchronizacja with Text_IO; use Text_IO; with ada.float_text_io; use ada.float_text_io; procedure spotkanie is task type odbiornik is entry GET; end Odbiornik; task type Nadajnik; task body Odbiornik is accept GET do - oczekiwanie na wejście put("odebrano komunikat"); New_Line; end GET; end Odbiornik; Odb : Odbiornik; -- uruchomienie zadania task body Nadajnik is c: Character; Get(c); exit when C='?'; Odb.GET; -- wołanie wejścia GET w zadaniu Odb end Nadajnik; Nad : Nadajnik; -- uruchomienie zadania Put("Uruchomiono zadania"); New_Line; end Spotkanie; - -- Implementacja sekcji krytycznej: with Text_IO; use Text_IO; with ada.float_text_io; use ada.float_text_io; with Ada.Calendar; use Ada.Calendar; procedure main is -- Specyfikacja task type SEMAPHORE is

entry ACCES_TO; entry FREE; end SEMAPHORE; -- Implmentacja task body SEMAPHORE is accept ACCES_TO; accept FREE; end SEMAPHORE; Drukarka : Integer; Semafor : SEMAPHORE; task type T(Init: Integer; Del: Integer); task body T is dana : Integer; Dana := Init; Semafor.ACCES_TO; -- początek sekcji krytycznej Drukarka:=dana; Put(Drukarka); New_Line; -- koniec sekcji krytycznej Semafor.FREE; delay Duration(Del); end T; Task1: T(2,1); Task2: T(4,2); end; -- Bufor synchronizujący komunikacje pomiędzy producentem a konsumentem: -- specyfikacja pakietu: package S_MEMORY1 is task type SHARED_MEMORY is entry WRITE(X: in Integer); entry READ(X: out Integer); end SHARED_MEMORY; end S_MEMORY1; -- implementacja pakietu: package body S_MEMORY1 is task body SHARED_MEMORY is PROTECTED_VARIABLE: Integer;

accept WRITE(x: in Integer) do PROTECTED_vARIABLE:=X; end WRITE; accept READ(X: out Integer) do X:=PROTECTED_VARIABLE; end READ; end SHARED_mEMORY; end S_MEMORY1; -- przykładowe zastosowanie bufora: with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Calendar; use Calendar; with S_MEMORY1; use S_MEMORY1; procedure main is task producer; task consumer; end main; S_M1: SHARED_MEMORY; task body producer is for I in 1..10 S_M1.WRITE(Integer(i)); delay 0.5; end; task Body Consumer is Dana : Integer; S_M1.READ(Dana); if Dana < 10 then Put(Dana); New_Line; end if; delay 1.0; end Consumer; -- zadanie cykliczne z eliminacją niekorzystnych składników czasowych: with Calendar; use Calendar; with Ada.Long_Float_Text_IO; use Ada.Long_Float_Text_IO;

procedure timer3 is task type Periodic1; task body Periodic1 is Seconds: constant Duration := 0.5; Period: constant Duration := 1.0 * Seconds; Offset: constant Duration := 1.0 * Seconds; Next_Time : Time := Clock + Offset; ActTime : Time; Sec1: Duration; Month1: Integer; Day1: Integer; Year1: Integer; delay until Next_Time; ActTime := Clock; Put("Biezacy czas:"); Split(Clock,Year1,Month1,Day1,Sec1); Put(Year1); Put(Month1); Put(Day1); Put(Integer(Sec1)); New_Line(1); Next_Time := Next_Time + Period; end Periodic1; Task1 : Periodic1; end timer3; -- Producent konsument + dzielona zmienna -- zrealizowana z zastosowaniem obiektu chronionego: with Ada.Float_Text_IO; use Ada.Float_Text_IO; with Calendar; use Calendar; procedure ob_chr1 is type moja_dana is mod 10; Dana : Moja_Dana := 0; procedure computes(y: in Integer) is put("konsumuje wartosc"); put(y); New_Line; Delay 0.4; end; procedure Produces(E: out Integer) is Dana:= Dana+1; Delay 1.0;

E:=Integer(Dana); end Produces; task consumer; task producer; protected type Shared_Data(Initial_Value: Integer) is function Read return Integer; procedure Write(New_Value: Integer); private Data: Integer := Initial_Value; end Shared_Data; My_Data : Shared_Data(125); task body consumer is Y: Integer; Y:=My_Data.Read; computes(y); end consumer; task body producer is E: Integer; produces(e); My_Data.Write(E); end producer; protected body Shared_Data is function Read return Integer is return Data; end Read; procedure Write(New_Value: Integer) is Data:=New_Value; end Write; end Shared_Data; end ob_chr1; Zagadnienie 2. (tworzenie pakietu) Należy skonstruować pakiet złożony z procedury Dwu_Kwadrat i funkcji Silnia (tworzonych na poprzednich zajęciach) oraz przykładowy program ładujący stworzony pakiet i korzystający z wymienionych funkcji.

Zagadnienie 3. (synchronizacja i komunikacja) Należy zaproponować rozwiązanie następującego problemu: Aplikacja ma się składać z dwu zadań. Pierwsze generuje ciąg liczb rzeczywistych i wysyła drugiemu. Zadanie drugie oblicza pierwiastek kwadratowy z każdej z nadesłanej liczby i odsyła pierwszemu. Zagadnienie 4. (pakiet Ada_Synchronous_Task_Control) Napisać aplikację, w której współbieżnie działają 2 zadania, przy czym jedno cyklicznie zawiesza swoje wykonywanie, a drugie powoduje cyklicznie odwieszanie zadania pierwszego. Zagadnienie 5. (obiekt chroniony) Należy uzupełnić przykład Producent konsument + dzielona zmienna według następujących zaleceń: a) Dokonać takiej modyfikacji przykładu, aby kilku konsumentów o różnej częstotliwości odbierania danych pobierało stan zmiennej dzielonej modyfikowanej przez producenta. b) Zmodyfikować strukturę konsumentów i producentów, aby były to wątki sterowane czasowo z eliminacją niekorzystnych składników czasowych. c) Pierwotny przykład producent - konsument + zmienna dzielona przekształcić w taki sposób, aby zamiast zmienne dzielonej pojawiała się kolejka.