www.eprace.edu.pl » system-wrzutnikowy » Opis budowy i oprogramowania urządzenia » Programowanie liniowe a programowanie wątkowe

Programowanie liniowe a programowanie wątkowe

Czym jest programowanie? Jest to sztuka zapisu algorytmu jakiegoś działania, recepty na wykonanie czegoś. Należy tutaj jednak wyraźnie rozróżnić pojęcia algorytm, implementacja, język. Autor w swojej pracy zawodowej często spotyka się z sytuacjami, w których jego rozmówcy nie potrafią dostrzec różnicy w znaczeniu tych pojęć. Zdarza się nieraz, że ktoś otrzymując do wglądu kawałek czyjegoś kodu zapisanego w języku "x" nie potrafi go w żaden sposób przeanalizować, by wyłuskać z niego ideę działania (algorytm) i np. zapisać to samo w języku "y". I to nie o brak znajomości składni danego języka chodzi - a o brak logicznego myślenia. Reasumując: algorytm jest przepisem "krok po kroku" jak wykonać jakąś operację. Algorytm implementuje się w wybranym języku na konkretną platformę sprzętową. Poprawnie stworzony algorytm da się zaimplementować w dowolnym języku. Sposób konkretnej implementacji wynikać będzie ze specyfiki wybranej platformy sprzętowej i dostępnych dla niej narzędzi programistycznych.

Powyższy wstęp miał na celu wyraźne rozgraniczenie znaczenia użytych pojęć. Rozgraniczenie takie jest niezbędne, aby móc poprawnie opisać różnice pomiędzy programowaniem liniowym a sposobem programowania w którym operacje wykonywane są niejako równolegle - stąd nazwa "wątkowe". Autor na co dzień dodaje jeszcze do tego wyrazu przedrostek "pseudo", ponieważ z punktu widzenia mikrokontrolera instrukcje nadal wykonywane są jedna po drugiej (czyli liniowo) - jednak efekt odpowiedniego sposobu implementacji danego algorytmu jest taki, że użytkownik urządzenia odnosi wrażenie, iż procesy przetwarzane są równolegle, niezależnie od siebie. Najprostszym przykładem może być generowanie opóźnienia. Zapewne każdy, kto zetknął się z mikrokontrolerami AVR, zna doskonale funkcje takie jak delay_ms() czy delay_us() wchodzące w skład pakietu bibliotek standardowych kompilatora avr-gcc. W sytuacji, gdy odmierzyć trzeba np. jedną sekundę przed wykonaniem kolejnej operacji wynikającej z algorytmu działania procesu, zdecydowana większość niewprawnych programistów użyje konstrukcji delay_ms(1000). Osiągną zamierzony efekt, jednak problem pojawi się wtedy, gdy program trzeba będzie rozbudować o większą ilość opcji, dodać nowe peryferia itp. Pętla główna programu będzie wykonywać się raz na sekundę, co jednoznacznie wykluczy możliwość przetwarzania jakichś innych operacji. To jest właśnie podstawowa wada liniowego sposobu pisania programów. Wyjściem z tej sytuacji może być:

- zastosowanie automatów sekwencyjnych, maszyn stanów,

- generowanie opóźnień w taki sposób, aby nie blokowały wykonywania pętli głównej,

- wprowadzenie systemu flag informujących o zakończeniu danej czynności.

Wszystkie powyższe mechanizmy zostały wykorzystane w oprogramowaniu urządzenia "SPA - 1n". Dzięki tej technice możliwe było m.in. wykonanie efektownych wizualizacji na małym wyświetlaczu alfanumerycznym 2x16 znaków, obsługa termometrów cyfrowych i zegara czasu rzeczywistego, wymiana danych z panelem klienta przy pomocy zdarzeniowego automatu sekwencyjnego oraz równoległa bardzo rozbudowana obsługa wejść cyfrowych. Poniższy rysunek pokazuje przykład dwóch różnych podejść do tego samego zagadnienia:

Rys. 11 - Idea programowania nieblokującego

Koncepcja działania procedury z ilustracji "b" zostanie szerzej omówiona w kolejnym rozdziale. Jak widać algorytm można implementować na różne sposoby. Jedne są lepsze, drugie gorsze. Ale tymi zdecydowanie najgorszymi są te, które powodują trwałe zablokowanie wykonywania dalszych bloków programu na rzecz oczekiwania na zakończenie działania wcześniejszych sekcji.

Konkludując: programowanie "wątkowe" jest znacznie trudniejsze od liniowego. Jednak warto po nie sięgnąć ze względu na korzyści jakie daje. Autor pracy na co dzień zawodowo zajmuje się programowaniem sterowników przemysłowych w językach standardu IEC. "Multiwątkowość" to w nich chleb powszedni. Jednak, jak się okazuje, przy odpowiednim podejściu do zagadnienia na małych 8-io bitowych AVR'ach również można uzyskać bardzo dobre rezultaty.



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.