Spód góry lodowej

Oprogramowanie wbudowane (Embedded Software) staje się coraz większą i coraz ciekawszą dziedziną informatyki.

Oprogramowanie wbudowane (Embedded Software) staje się coraz większą i coraz ciekawszą dziedziną informatyki.

Tylko niewielka część góry lodowej pływa nad wodą, będąc widoczna dla obserwatora. Reszta, czyli prawie 90%, znajduje się pod powierzchnią. Świat informatyki coraz bardziej przypomina kawałek lodowca, dryfujący po oceanie. Jedynie niewielka część oprogramowania pozostaje widoczna dla użytkowników. Większość działa w ukryciu, w niewielkich, specjalizowanych urządzeniach powszechnego użytku. Świat komputerów stoi w obliczu fundamentalnej zmiany, która odbędzie się właśnie za sprawą oprogramowania wbudowanego (Embedded Software).

Słowo "komputer" ma dwa znaczenia. Pierwsze, potoczne, każe rozumieć komputer jako kilka fizycznych urządzeń połączonych kablami (jednostka centralna, monitor, klawiatura). Drugie, używane w zasadzie wyłącznie przez specjalistów, opisuje komputer jako pewną abstrakcję (wg definicji von Neumanna), składającą się z procesora, pamięci i urządzeń wejścia/wyjścia. Biurkowy PC, czyli komputer w potocznym tego słowa znaczeniu, składa się z kilku, jeśli nie kilkunastu komputerów abstrakcyjnych. Telefon komórkowy i elektroniczny notatnik to także komputery. Takich komputerów każdy z nas ma więcej - w pralce, telewizorze, poduszce powietrznej w samochodzie, odtwarzaczu wideo itd. Nikt nie nazwałby swojej pralki "komputerem", choć de facto pralka nim jest - spełnia definicję von Neumanna nie gorzej niż PC na biurku.

Te wszystkie ukryte komputery muszą być oczywiście wyposażone w oprogramowanie. Systemy zintegrowane z urządzeniami to poniekąd "świat osobny" informatyki - środowisko mające własne metody, architektury i narzędzia. Dotychczas pozostawał on nieco na uboczu głównego nurtu informatyki, dość nieufnie przyglądając się nowinkom z dziedziny systemów operacyjnych, sposobów komunikacji z użytkownikiem i osiągnięć w sieciach komputerowych. Wszystko wskazuje jednak, że to się zmieni, a systemy wbudowane mogą stać się głównym nurtem rozwoju oprogramowania.

Inny świat

Twórcy programów użytkowych do serwerów lub komputerów osobistych (nazwijmy je w uproszczeniu "typowym oprogramowaniem") będą zaskoczeni, do jakiego stopnia oprogramowanie zintegrowane z urządzeniami rządzi się własnymi prawami.

Dla autora typowego programu największa trudność polega na ogarnięciu złożonego problemu, dokładnym odwzorowaniu go przez obiekty i algorytmy, a potem precyzyjnym zakodowaniu tego w wybranym języku programowania. Regułą są platformy 32-bitowe, a nawet nowocześniejsze. Na ogół czas wykonania programu nie jest najważniejszym problemem - użytkownikowi edytora tekstu jest wszystko jedno, czy przeformatowanie akapitu trwa pół sekundy czy sekundę. Zajętość pamięci też nie stanowi ograniczenia - pamięci jest na ogół pod dostatkiem, a jeśli jej chwilowo zabraknie, można "pożyczyć" pamięć wirtualną. W razie błędu oprogramowania użytkownik zawsze może zresetować komputer albo przynajmniej przerwać proces.

W świecie oprogramowania wbudowanego zadania na ogół są względnie proste i dobrze zdefiniowane - pralka ma wirować, paliwo ma w odpowiedniej chwili znaleźć się w cylindrze, a odtwarzacz wideo wysunąć kasetę. Problemem są czas i miejsce. Czynności mają być wykonane w konkretnych momentach - skutki opóźnienia nawet o ułamki sekund mogą być bardzo poważne. W sterownikach urządzeń częste są platformy 16-bitowe, a 8-bitowe (jak Zilog Z80 czy Intel 8051) są niemal regułą. Komputery wbudowane w urządzenia mają istotne ograniczenia techniczne: małą moc obliczeniową i jeszcze mniejszą pamięć operacyjną. W przypadku błędu w oprogramowaniu nie można po prostu wykonać restartu - często kończy się zniszczeniem urządzenia.

Wymieńmy jeszcze świat automatyki przemysłowej, który jest czymś pośrednim między oprogramowaniem typowym a wbudowanym. Działanie takich systemów polega na zbieraniu wielu danych z obiektu przemysłowego (czasami jest to wiele tysięcy parametrów), przesyłaniu ich do centralnego systemu informatycznego, który je analizuje i podejmuje optymalizację całości procesu na podstawie złożonych kryteriów. W takim procesie kluczowe są dwa czynniki: niezawodność i szybkość reakcji. Z tego powodu takie systemy są konstruowane szczególnie starannie, sprawdzane wielo-krotnie, a zdarza się, że obok głównego komputera instalowany jest zapasowy, który w razie awarii jest gotowy natychmiast przejąć wszystkie funkcje systemu podstawowego. "Czasami etap testowania oprogramowania zajmuje czwartą część całego projektu. Testuje się niemalże każdy element" - mówi Krzysztof Białowolski, dyrektor ds. operacyjnych w Delphi Automotive Poland, firmie produkującej podzespoły samochodowe, m.in. dla koncernu General Motors. "Producenci samochodów chcieliby zinformatyzować wszystko, tak aby przy wsparciu elektroniki można było samochód maksymalnie przystosować do indywidualnych potrzeb kierowcy" - dodaje.

W systemach wbudowanych nie ma miejsca na opóźnienia w sieci czy w systemie operacyjnym, m.in. z tego powodu w zasadzie nie jest stosowany niedeterministyczny algorytm dostępu sieci Ethernet. Są używane specjalizowane systemy operacyjne czasu rzeczywistego, takie jak QNX, OS/9 czy iRMX. Nieprzewidziane opóźnienie rzędu np. sekundy w kolumnie rafinacyjnej może mieć dramatyczne skutki, ze zniszczeniem urządzenia włącznie. Rola oprogramowania wbudowanego w czujniki na obiekcie przemysłowym jest prosta: raportować, a w sytuacji zagrożenia w mgnieniu oka zareagować.

Pozornie przestarzałe narzędzia

Patrząc na narzędzia, z których korzystają twórcy oprogramowania wbudowanego, odnosi się wrażenie, że pozo- stają one za technologiami stosowanymi przez informatyków, pracujących nad typowymi systemami. Podstawowym narzędziem jest kompilator języka C. Najważniejszej przyczyny tego stanu należy chyba upatrywać w równoważeniu przez C cech języka wysokiego poziomu z możliwością programowania na bardzo niskim, systemowym poziomie. "C zapewnia nam dobrą przenośność między platformami i dostęp do kom- pilatorów skrośnych. Jednocześnie poz-wala integrować program z procedurami pisanymi w Assemblerze tam, gdzie jest to konieczne ze względu na wy- dajność" - wyjaśnia Paweł Sklarow z gdańskiej firmy Micronet, produkującej centralki telefoniczne wraz z oprogramowaniem do nich.

Użycie kompilatorów języka C, czyli narzędzi raczej wychodzących z użycia, jest tylko z pozoru nielogiczne. Wystarczy prześledzić historię poprawek i uaktualnień do pakietów programistycznych, by zrozumieć, że "nowe" oznacza na ogół tyle co "niepewne". Z racji wcześniej opisanej specyfiki działania oprogramowania wbudowanego w urządzenia programiści Micronetu i podobnych przedsiębiorstw nie mogą sobie pozwolić na niepewność i błędy. Dlatego dla nich lepsze jest oprogramowanie nie najnowsze, za to stabilne i sprawdzone.

Pamiętajmy, że przy pisaniu typowych aplikacji platforma, na której tworzy się program, jest jednocześnie jego platformą docelową. Tymczasem nie ma zintegrowanych środowisk do języka C dla pralek automatycznych, choć właśnie w tym języku trzeba tworzyć oprogramowanie, które w pralkach będzie działało. Należy korzystać z kompilatorów skrośnych (cross-compilers), które generują kod jednej maszyny na innej. Bardzo ogranicza to możliwości testowania oprogramowania i tym samym mocno komplikuje proces inżynierii oprogramowania wbudowanego.

Język C nie jest jedynym narzędziem. Istnieją także specjalizowane języki do wąskich zastosowań. Jednym z nich jest CHILL - język stworzony specjalnie na potrzeby telekomunikacji. W trakcie procesu tworzenia takiego oprogramowania często są stosowane te same metodyki analizy i projektowania systemów informatycznych. Większą uwagę jednak poświęca się jakości. To w celu jej zapewnienia Micronet do opisu algorytmów programu stosuje język graficzny SDL (Functional Specification and Description Language).

Istnieją rozwiązania quasi-programistyczne, które pozwalają osobom nie znającym typowych języków na stworzenie własnych systemów dla prostych urządzeń mikroprocesorowych. Inżynierowie automatycy chętnie stosują tzw. drabinki, a także "programowanie" blokami funkcyjnymi i tabelkami opisującymi transformacje. Mikroelektronicy zaś cenią Bascom - stworzony przez holenderską firmę MCS Electronics - kompilator języka Basic na popularne architektury mikrokomputerów jednoukładowych, na czele z najpopularniejszym z nich: Intelem 8051.

W pogoni za standardem

Przeglądając publikacje zagraniczne z dziedziny oprogramowania wbudowanego, widoczna jest wielka potrzeba standardu. Sytuacja, w której każda architektura sprzętowa i każda platforma programistyczna wymagają specyficznych metod dostępu do urządzeń, mają własne biblioteki i specjalizowaną gałąź zastosowań, jest na dłuższą metę nie do utrzymania - szczególnie, gdy rynek oprogramowania wbudowanego rośnie jak na drożdżach. Programiści potrze-bują standardu programistycznego, standardu systemu operacyjnego i abstrakcyjnej warstwy podstawowych usług.

Wszystko wskazuje na to, że standardową platformą systemową zostanie Linux, a raczej jego specjalne odmiany (Embedded Linux). Portal www.linuxdevices.com to kopalnia narzędzi i wiedzy na temat implementacji Linuxa. Pod kontrolą tego systemu pracują np. napędy CD-ROM, moduły PC/104 (komputery PC do zastosowań przemysłowych), silniki elektryczne dużej mocy, a nawet... ekspres do kawy! Niektóre odmiany Linuxa zajmują niecałe 1,5 MB pamięci i nie jest problemem umieszczenie ich w nawet bardzo małym (pod względem rozmiarów i mocy) urządzeniu.

Drugą podporą, na której ma się wznieść gmach jednolitego dostępu do urządzeń, ma być język Java. Ambicją firmy Sun jest stworzenie maszyny wirtualnej Javy na wszystkie popularne platformy sprzętowe i spopularyzowanie tej technologii w świecie oprogramowania wbudowanego. Pomysł jest ambitny i wizjonerski. Java jest nowoczesnym językiem obiektowym, a towarzyszące jej technologie mają wiele usług, pozwalających na łączenie urządzeń. Wydaje się wręcz wymarzonym rozwiązaniem do oprogramowania urządzeń złożonych z mniejszych elementów, do pewnego stopnia autonomicznych, ale np. zarządzanych wspólnie. Przykładem takiego systemu mógłby być samochód, wyposażony w osobne układy systemów sterowania silnikiem, zawieszeniem, obiegiem oleju i wody itd., a jednocześnie sterowanych z jednego punktu oraz monitorowanych i diagnozowanych w czasie rzeczywistym. Sun reklamuje zastosowanie Javy także w systemach audio Sony, dzięki czemu oprogramowanie łączy wszystkie części wieży bez udziału użytkownika, a ponadto optymalizuje parametry dźwięku.

Wizja Suna na razie nie spotyka się z wielkim entuzjazmem ze strony przedsiębiorstw produkujących urządzenia i oprogramowanie wbudowane. Paweł Sklarow z Micronetu jest raczej sceptyczny: "Cena platformy jest nieatrakcyjna, a także pamięć i moc obliczeniowa wymagane przez maszynę wirtualną Javy są zbyt duże. Może przy wielkoseryjnej produkcji koszt sprzętu spada, ale my działamy na zbyt konkurencyjnym rynku, żeby można było windować ceny". Pracujący w USA Polak, informatyk z przeszłością akademicką, wyraża się jeszcze bardziej krytycznie: "Java nie nadaje się do zastosowań czasu rzeczywistego. Zbyt wiele warstw programowych oznacza słabą skalowalność. A na dodatek jest jeszcze odśmiecacz (garbage collector), który włącza się nie wiadomo kiedy, spowalniając działanie programu".

Po pierwsze: komunikacja

Skoro świat oprogramowania wbudowanego posługuje się nienowoczes- nymi narzędziami, skoro toczy boje o standaryzację systemu operacyjnego i technologii programistycznej, to dlaczego miałby być tak obiecującym segmentem informatyki? Odpowiedzią na to pytanie jest komunikacja. W ostatnich latach, dzięki rozpowszechnieniu telefonii komórkowej i ogromnemu postępowi w dziedzinie komunikacji bezprzewodowej, małe komputery wbudowane w urządzenia zaczęły ze sobą "rozmawiać".

Już dziś w laboratoriach działają prototypowe instalacje biur i mieszkań, gdzie małe urządzenia komunikują się ze sobą i światem, aby życie uczynić prostszym, a biznes - bardziej efektywnym. Powszechnie znany jest przykład lodówki, która potrafi zamówić odpowiednie produkty spożywcze, gdy ich ilość spada poniżej ustalonego minimum. To gadżet, ale rzeczywistością jest już hol banku, w którym centralny system zintegrowany z komputerami wbudowanymi w urządzenia monitoruje klientów, zapewnia dopływ świeżego powietrza, a dzięki komunikacji z kartami mikroprocesorowymi pracowników gwarantuje bezpieczeństwo stref. Rzeczywistością jest także oprogramowanie zintegrowane z pojazdami i bramkami na autostradzie, które we Włoszech automatycznie pobiera opłaty od użytkowników i gwarantuje błyskawiczny przejazd policji czy straży pożarnej. W Skandynawii działają supermarkety, w których cały proces zakupów odbywa się bezobsługowo. Każdy towar jest wyposażony w mikrochip, który w momencie przejeżdżania przez bramkę kasową "melduje się" bezprzewodowo czytnikowi, a klientowi pozostaje wsunięcie w szczelinę swojej portmonetki elektronicznej i wstukanie kodu PIN. Te wszystkie rozwiązania są możliwe dzięki oprogramowaniu wbudowanemu w urządzenia i komunikacji bezprzewodowej. Można przypuszczać, że ich rozpowszechnienie w najbliższych latach będzie lawinowo rosnąć.

Gdzieś na końcu tej drogi jest otoczenie pełne małych, "inteligentnych" urządzeń, cicho szepczących w zrozumiałym tylko dla siebie języku, odgadujących nasze życzenia, rozpoznających nasze potrzeby i starających się je natychmiast spełnić. Świat naszpikowany mikroskopijnymi komputerami, z których każdy osobno rozwiązuje jeden, atomowy problem, ale wszystkie razem zapewniają nową jakość życia. Świat bardziej przypominający wizję z książek science fiction niż znane nam urządzenia z oprogramowaniem wbudowanym.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200