Proprietary System

1.1 History of this Book and What You’ll Get From Reading It

W ciągu mniej więcej roku, po ukończeniu mojej pierwszej książki, wskrzesiłem stary projekt budowy autonomicznej łodzi podwodnej (określany jako projekt E-2) z pewnymi dość trudnymi wymaganiami funkcjonalnymi. W trakcie rozwijania tego pomysłu, spędziłem wiele godzin w Internecie i innych miejscach, badając techniki szybkiego rozwoju różnych elektromechanicznych systemów sterowania i platform do uruchamiania dość złożonych algorytmów przetwarzania sygnałów. Choć oczywiście w Internecie i książkach o robotyce hobbystycznej można znaleźć tysiące przydatnych projektów i strzępków informacji, odkryłem, że nikt inny nie ma dokładnie takich samych priorytetów jak ja. W szczególności, najwyraźniej nie ma jednej referencji, która zbiera razem przynajmniej wstępne rozwiązania wszystkich wbudowanych problemów projektowych, które wpłynęły na mój projekt: potrzeba użycia tanich (open-source) narzędzi i systemów operacyjnych, wymóg dla kilku funkcji z dość trudnymi wymaganiami czasu rzeczywistego i chęć użycia tanich, dostępnych na rynku komponentów klasy konsumenckiej, gdziekolwiek to możliwe. Dostępne zasoby na wiele tematów koncentrują się albo na bardzo drogich komponentach przemysłowych, albo na ściśle ograniczonych systemach zbudowanych wokół pojedynczego mikrokontrolera, z delikatnie zoptymalizowanym, nieportowalnym kodem do sterowania peryferiami – i bardzo ograniczonym zakresem obsługi peryferiów. Te ostatnie ograniczenia projektowe są nieuniknione, gdy pracujesz w ciasnych wymaganiach dotyczących zasilania, ograniczeniach przestrzennych, lub niskich kosztach materiałów (BOM), ale jest to nadmierny wysiłek, aby zbudować i dostroić takie systemy dla jednorazowego projektu lub prototypu. Co więcej, poznanie wszystkich szczegółów wymaganych do złożenia takiego systemu jest ogromnym zadaniem; łatwo jest się pogubić w dopracowywaniu szczegółów, nie zdoławszy nigdy zbudować kompletnego, działającego systemu. Irytujące jest to, że wiele poprawek i większość starannego planowania, które wykonałeś, aby system działał, trzeba będzie wyrzucić do kosza, jeśli przejdziesz do rzeczywistej produkcji lub jeśli będziesz musiał zbudować kilka kolejnych jednostek z nieco innymi komponentami.

To, czego szukałem podczas rozwijania projektu E-2, to sposób na zbudowanie różnych modułów czasu rzeczywistego (czujników i aktuatorów), które można by łatwo i tanio podłączyć do komputera ogólnego przeznaczenia z systemem Linux. Linuksowa skrzynka służyła jako poligon doświadczalny dla algorytmów, które później mogły być przeniesione do mniejszego, chłodniejszego i bardziej energooszczędnego modułu przetwarzającego. Potrzebowałem solidnej podstawy w postaci znanego, dobrego kodu i technik, tak abym mógł wyjść z tego punktu i zbudować swój własny, dostosowany do potrzeb system. Chciałem też mieć prosty przewodnik do budowania wbudowanych dystrybucji Linuksa. Dla początkowego, nienadającego się do użytku prototypu mojej łodzi podwodnej, nie miałem dokładnego pojęcia ile mocy procesora będę potrzebował w ostatecznej wersji – nie chciałem być przywiązany do konkretnej architektury mikrokontrolera, ani nie chciałem ugrzęznąć w próbach dostrajania wielu zadań w czasie rzeczywistym na pojedynczym mikrokontrolerze. Chciałem też użyć kilku urządzeń peryferyjnych, takich jak kamery, które najłatwiej połączyć z systemem operacyjnym ogólnego przeznaczenia.

Te wymagania mogą brzmieć jak akord w twoim własnym życiu zawodowym. Prawdopodobnie spotkaliście się z sytuacjami, w których przydatne byłoby zautomatyzowanie jakiegoś długoterminowego eksperymentu polegającego na zbieraniu danych lub stworzenie prostego automatycznego kontrolera do programowania, produkcji lub innego zadania. W tym duchu, trzy inne przypadki, w których zastosowałem techniki zawarte w tej książce to:

Opracowanie szeregu udanych (komercyjnie wprowadzonych na rynek) sieciowych urządzeń multimedialnych, przeznaczonych do zastosowań w reklamach bez nadzoru i galeriach sztuki.

Opracowanie specjalistycznej, prawie całkowicie automatycznej aparatury do testowania uszkodzeń mechanicznych niektórych artykułów elektroniki użytkowej.

Konstrukcja automatycznego, szybkiego dataloggera, który monitoruje łącze radiowe i wyodrębnia komunikaty DTMF skierowane do określonych odbiorników.

Druga powyższa pozycja jest szczególnie interesująca, ponieważ ładnie pokazuje, jak ta książka może mieć praktyczną wartość w kontroli procesu i zastosowaniach testowych. W 2002 roku, krótko pracowałem dla małego oddziału międzynarodowej firmy, której głównym przedmiotem działalności były artykuły gospodarstwa domowego i biurowe z tworzyw sztucznych. Najbardziej pouczające było zbadanie ich zautomatyzowanych urządzeń testowych – zastrzeżonych systemów – i porównanie kosztów i złożoności konfiguracji tych urządzeń ze stosunkowo niskim kosztem i czasem konfiguracji prostego, opartego na Linuksie SBC sterującego tymi samymi siłownikami pneumatycznymi i czujnikami. Wyraźnie widać, że rynek tanich systemów testowych tego typu nie jest w pełni wykorzystany. Własne systemy stosowane w tym konkretnym zakładzie kosztowały prawie 20 000 USD za pół tuzina siłowników i związanych z nimi sterowników PLC, plus niezliczone godziny czasu na konfigurację1. Oprogramowanie sterujące tymi urządzeniami było specjalistyczne i niezrozumiałe; w rzeczywistości większość tego sprzętu stała bezczynnie, ponieważ osoby, które pierwotnie je skonfigurowały, odeszły z firmy. Dla porównania, te same zadania można z łatwością zrealizować za pomocą zwykłego komputera PC, kosztującego zaledwie kilkaset dolarów, plus 200 dolarów za siłownik i związane z nim układy pneumatyczne. Co ważniejsze, oprogramowanie sterujące dla takiego systemu jest prostym programem w języku C, łatwo zrozumiałym i możliwym do zaadaptowania przez każdego kompetentnego studenta informatyki lub inżynierii elektronicznej; było kilku kandydatów łatwo dostępnych w firmowym laboratorium.

Z uwagi na charakter badań, które doprowadziły do powstania tej książki, zawarłem w tekście posypkę szczegółów morskich, z których nie wszystkie są bezpośrednio istotne dla wbudowanego inżyniera. Jeśli ten materiał nie jest interesujący, możesz go bezpiecznie zignorować bez uszczerbku dla zrozumienia pozostałego tekstu w jakikolwiek sposób. Powodem, dla którego te informacje są zawarte obok „czystej” dyskusji na temat rozwoju wbudowanego jest przede wszystkim zilustrowanie rzeczywistych wymagań i sposobu myślenia, które doprowadziły do różnych decyzji projektowych w projekcie E-2. Inżynieria nie jest nauką teoretyczną; jest to dyscyplina stosowana, i to właśnie mając to na uwadze, używam konkretnych przykładów do zilustrowania punktów teoretycznych.

Powinniście również zauważyć, że niektóre z opinii wyrażonych w tej książce, jeśli nie są dokładnie kontrowersyjne (z wyjątkiem standardów Usenetu – wszystko na Usenecie jest kontrowersyjne!), są przynajmniej dyskusyjne; na przykład wybór AVR jako mojej platformy sterowania w czasie rzeczywistym. Z tego powodu przedstawiłem dodatkowe uzasadnienie dla decyzji, które podjąłem w tym tekście. To dodatkowe wyjaśnienie powinno pokazać powody, dla których wybrałem konkretne ścieżki, ale wyraźnie nie ma na celu prozelityzowania AVR ludziom, którzy mają doświadczenie z inną architekturą i ją preferują. Ponownie, ten „materiał bonusowy” nie jest krytyczny dla zrozumienia podstawowych koncepcji przedstawionych tutaj, i możesz go bezpiecznie pominąć jeśli chcesz.

Pamiętaj również, że ta książka celowo nie jest „biblią”. Nie jest to wyczerpujące omówienie każdego pojedynczego niuansu poruszanych tematów; taka praca objęłaby kilka półek. Głównym celem tej książki jest opisanie i zilustrowanie prostej, modułowej, niedrogiej metodologii implementacji złożonych systemów wbudowanych oraz przedstawienie gotowych do użycia modułów, które czytelnik może zaadaptować do własnych projektów. Szczególny nacisk położono na realizację rozwiązań end-to-end przy użyciu taniego sprzętu deweloperskiego i wolnego oprogramowania narzędziowego. Zanim dotrzesz do kilku ostatnich stron, miejmy nadzieję, że powinieneś mieć następujące informacje:

Funkcjonalne zrozumienie krytycznych szczegółów „pod maską” wymaganych do uruchomienia systemu Linux na platformach x86.

Wprowadzenie do typów problemów, które napotkasz, używając wbudowanych komputerów jednopłytkowych x86 jako rdzenia systemów rejestracji danych i kontroli ruchu.

Podstawowe informacje o rodzinie mikrokontrolerów AVR firmy Atmel.

Praktyczne wprowadzenie do budowy kilku prostych układów akwizycji danych i sterowania silnikiem oraz podłączania ich do komputerów PC.

Kilka podstawowych informacji na temat bezpieczeństwa danych, uwierzytelniania i niezawodności, które mają wpływ na systemy wbudowane.

Podstawową ideą jest to, że czytelnik ma dość intymne doświadczenie z jednym lub drugim z tematów rozwoju aplikacji Linuksa lub rozwoju głęboko wbudowanych systemów – ta książka jest zaprojektowana tak, aby podnieść cię na wiodącą krawędź twojej krzywej uczenia się z podstawami którejkolwiek strony równania brakuje. Zapewnia również klej, który wiąże te kawałki informacji razem w ogólnym kontekście dość złożonego projektu. Zauważ, przy okazji, że użyłem tytułowego słowa „książka kucharska” z pewną dozą niepewności. Inżynieria oparta wyłącznie na książce kucharskiej – łączenie niezrozumiałych elementów niczym sfery Capsela – nigdy nie jest dobrą praktyką. W tej książce daję Ci kilka gotowych do użycia elementów Capseli, ale mówię też jak i dlaczego zrobiłem koła zębate i wały w każdym elemencie, a także, w pewnym stopniu, jak możesz pójść dalej i zrobić lepsze kawałki dla siebie. Te wyjaśnienia są o wiele ważniejsze niż plany samych kawałków.

Planując książkę taką jak ta, łatwo wpaść w jedną z dwóch pułapek: albo stworzyć jedną, monolityczną „mega-aplikację”, która ilustruje wszystkie pożądane punkty, ale jest niezwykle trudna do zwięzłego wyjaśnienia, albo z drugiej strony rozbić temat na liczne małe abstrakcyjne notatki, które wielu czytelników będzie miało problem z integracją w rzeczywistych projektach. Próbowałem poruszać się pomiędzy tymi dwoma skrajnościami, rozbijając bardziej interesujące moduły projektu E-2 na kilka małych, praktycznych aplikacji wraz z zasadniczo samodzielnym kodem i wystarczającą ilością teorii, aby zmodyfikować i rozszerzyć te aplikacje do własnych zastosowań.

Na koniec uwaga dla osób, które posiadają moją poprzednią książkę, Embedded System Development on a Shoestring. Ta książka nie została zaprojektowana jako sequel tamtej książki, ale jest to zdecydowanie powiązany materiał. Jeśli wykorzystacie techniki zawarte w tej książce do zbudowania prototypowego urządzenia, a później będziecie chcieli je zredukować do zoptymalizowanego rozwiązania jednoukładowego, moja wcześniejsza praca pomoże wam zrozumieć, jak używać wolnych narzędzi GNU, by łatwo przenieść wasze oprogramowanie na mikrokontroler ARM. Główne uwagi krytyczne, jakie otrzymałem pod adresem tej poprzedniej książki, dotyczyły tego, że powinna ona obejmować szerszy zakres informacji i że było w niej zbyt mało ilustracji, co czyniło ją raczej suchą lekturą. Wysłuchałem tych uwag i mam nadzieję, że ta książka zaspokoi Twoje potrzeby w obu tych aspektach. Jak zawsze, wasze komentarze i sugestie są mile widziane; możecie wysłać mi e-mail na adres lub odwiedzić moją stronę internetową pod adresem http://www.zws.com/.

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.