1.1 Tämän kirjan historia ja mitä saat lukemalla sen
Vuoden kuluessa, ensimmäisen kirjani valmistumisen jälkeen, herätin uudelleen henkiin vanhan lemmikkiprojektini, joka koski autonomisesti toimivan sukellusveneen rakentamista (E-2-projektina tunnettu projekti), jolla oli tietyt, melko haastavat toiminnallisuusvaatimukset. Tätä ideaa kehitellessäni vietin monia tunteja Internetissä ja muualla tutkiessani tekniikoita erilaisten sähkömekaanisten ohjausjärjestelmien ja alustojen nopeaan kehittämiseen melko monimutkaisten signaalinkäsittelyalgoritmien suorittamiseksi. Vaikka Internetistä ja harrastelijarobotiikkaa käsittelevistä kirjoista löytyy tietysti tuhansia hyödyllisiä hankkeita ja tiedonpätkiä, huomasin, että kenelläkään muulla ei näyttänyt olevan täsmälleen samoja prioriteetteja kuin minulla. Erityisesti ei ilmeisesti ole olemassa mitään yksittäistä viitetietoa, joka kokoaisi yhteen ainakin alustavat ratkaisut kaikkiin sulautetun suunnittelun ongelmiin, jotka vaikuttivat projektiini: tarve käyttää edullisia (avoimen lähdekoodin) työkaluja ja käyttöjärjestelmiä, vaatimus useista ominaisuuksista, joilla on melko kovat reaaliaikavaatimukset, ja halu käyttää halpoja kuluttajaluokan komponentteja aina, kun se on mahdollista. Monista aiheista saatavilla olevat resurssit keskittyvät joko hyvin kalliisiin teollisiin komponentteihin tai tiukasti rajattuihin järjestelmiin, jotka on rakennettu yhden mikrokontrollerin ympärille ja joissa on hienovaraisesti optimoitua, ei-porattavaa koodia oheislaitteiden ohjaamiseen – ja vieläpä hyvin rajallisella oheislaitteiden tukivalikoimalla. Nämä jälkimmäiset järjestelmäsuunnittelurajoitukset ovat väistämättömiä, kun työskentelet tiukkojen tehovaatimusten, tilarajoitusten tai alhaisimpien materiaalikustannusten mukaan, mutta tällaisten järjestelmien rakentaminen ja virittäminen kertaluonteista projektia tai prototyyppiä varten on kohtuuttoman työlästä. Lisäksi tällaisten järjestelmien kokoamiseen tarvittavien yksityiskohtien opettelu on valtava tehtävä; on helppo hukkua yksityiskohtien hienosäätöön ilman, että onnistuu koskaan saamaan käyttöönsä täydellistä, toimivaa järjestelmää. Ärsyttävää on, että monet hienosäädöt ja suurin osa huolellisesta suunnittelusta, jonka teet saadaksesi järjestelmän toimimaan, joudut heittämään pois, jos siirryt varsinaiseen tuotantoon, tai jos sinun on rakennettava lisää yksiköitä hieman erilaisilla komponenteilla.
Etsin E-2-projektia kehittäessäni tapaa rakentaa erilaisia kovia reaaliaikaisia moduuleja (antureita ja toimilaitteita), jotka voitaisiin helposti ja edullisesti liittää Linuxia pyörittävään yleiskäyttöiseen tietokoneeseen. Linux-laatikko toimi testialustana algoritmeille, jotka myöhemmin siirrettäisiin pienempään, viileämpään ja energiatehokkaampaan prosessointimoduuliin. Tarvitsin vankan perustan tunnetulle hyvälle koodille ja tekniikoille, jotta voisin lähteä siitä liikkeelle ja rakentaa oman räätälöidyn järjestelmäni. Halusin myös yksinkertaisen ja toimivan oppaan sulautettujen Linux-jakeluiden rakentamiseen. Sukellusveneeni alkuperäisessä, ei-kannattavassa prototyypissä minulla ei ollut tarkkaa käsitystä siitä, kuinka paljon prosessoritehoa tarvitsisin lopullisessa versiossa – en siis halunnut sitoutua tiettyyn mikrokontrolleriarkkitehtuuriin, enkä halunnut jumiutua yrittäessäni viritellä ja virittää monia reaaliaikaisia tehtäviä yhdellä mikrokontrollerilla. Halusin myös käyttää muutamia oheislaitteita – kuten kameroita – jotka on helpointa liittää yleiskäyttöisen käyttöjärjestelmän kautta.
Nämä vaatimukset saattavat kuulostaa omasta työelämästäsi tutulta. Todennäköisesti olet kohdannut tilanteita, joissa olisi hyödyllistä automatisoida jokin pitkäaikainen tiedonkeruukokeilu tai luoda yksinkertainen automatisoitu ohjain ohjelmointia, valmistusta tai muuta tehtävää varten. Tässä mielessä kolme muuta tapausta, joissa olen soveltanut tässä kirjassa esitettyjä tekniikoita, ovat:
Kehitettiin joukko menestyksekkäitä (kaupallisesti käytössä olevia) verkkomultimedialaitteita, jotka on suunniteltu valvomattomiin mainos- ja taidegalleriasovelluksiin.
▪
Kehitettiin erikoistunut, lähes täysin automaattinen mekaanisten vikojen testaukseen tarkoitettu laitteisto tietyille kuluttajaelektroniikkatuotteille.
▪
Automaattisen nopean dataloggerin rakentaminen, joka valvoo radiolinkkiä ja poimii DTMF-viestejä, jotka on kohdistettu tiettyihin vastaanottimiin.
Toinen edellä mainittu kohde on erityisen kiinnostava, koska se osoittaa hienosti, miten tästä kirjasta voi olla käytännön hyötyä prosessinvalvonta- ja testaussovelluksissa. Työskentelin vuonna 2002 lyhyen aikaa monikansallisen yrityksen pienessä osastossa, jonka pääpaino oli kotitalous- ja toimistomuovitavaroissa. Oli erittäin opettavaista tutkia heidän automatisoituja testauslaitteitaan – omia järjestelmiään – ja verrata näiden laitteistojen kustannuksia ja asennuksen monimutkaisuutta samoja pneumaattisia toimilaitteita ja antureita ohjaavan yksinkertaisen Linux-pohjaisen SBC:n suhteellisen alhaisiin kustannuksiin ja asennusaikaan. On selvää, että tämäntyyppisten edullisten testausjärjestelmien markkinat ovat alikäytössä. Tässä laitoksessa käytössä olevat omat järjestelmät maksoivat lähes 20 000 dollaria puolesta tusinasta toimilaitteesta ja niihin liittyvistä PLC:istä sekä lukemattomista tunneista asennusaikaa1. Näiden laitteiden ohjausohjelmisto oli erikoistunut eikä sitä ymmärretty hyvin; itse asiassa suurin osa näistä laitteista seisoi käyttämättömänä, koska ne alun perin konfiguroineet henkilöt olivat lähteneet yrityksestä. Sitä vastoin samat tehtävät voitaisiin helposti hoitaa tavallisella PC:llä, joka maksoi vain muutamia satoja dollareita, ja lisäksi ehkä 200 dollaria toimilaitetta kohden siihen liittyvää pneumatiikkaa varten. Vielä tärkeämpää on, että tällaisen järjestelmän ohjausohjelmisto on yksinkertainen C-ohjelma, jonka kuka tahansa pätevä tietojenkäsittelytieteen tai elektroniikan pääaineopiskelija voi helposti ymmärtää ja mukauttaa; yrityksen laboratoriossa oli useita ehdokkaita, jotka olivat helposti saatavilla.
Tämän kirjan syntyyn johtaneen tutkimuksen luonteen vuoksi olen sisällyttänyt tekstiin ripauksen merivoimien yksityiskohtia, joista kaikki eivät ole sulautettujen järjestelmien insinööreille suoraan merkityksellisiä. Jos tämä materiaali ei kiinnosta, voit huoletta jättää sen huomiotta vaarantamatta muun tekstin ymmärtämistä millään tavalla. Syy siihen, että nämä tiedot on sisällytetty ”puhtaasti” sulautetun järjestelmän kehityskeskustelun rinnalle, on pääasiassa se, että ne havainnollistavat niitä todellisia vaatimuksia ja ajattelutapoja, jotka johtivat erilaisiin suunnittelupäätöksiin E-2-hankkeessa. Insinöörityö ei ole teoreettista tiedettä, vaan se on soveltava tieteenala, ja tämän vuoksi käytän konkreettisia esimerkkejä havainnollistamaan teoreettisia seikkoja.
On myös syytä huomata, että jotkin tässä kirjassa esitetyistä mielipiteistä, vaikkeivät ne olekaan varsinaisesti kiistanalaisia (paitsi Usenet-standardien mukaan – kaikki Usenetissä on kiistanalaisia!), ovat ainakin kiistanalaisia; esimerkkinä mainittakoon AVR:n valinta reaaliaikaisen ohjauksen alustaksi. Tästä syystä olen esittänyt lisäperusteluja tässä tekstissä tekemilleni päätöksille. Tämän lisäselvityksen pitäisi osoittaa syyt, joiden vuoksi valitsin tietyt reitit, mutta sen tarkoituksena ei ole nimenomaan julistaa AVR:ää ihmisille, joilla on kokemusta jostain muusta arkkitehtuurista ja jotka pitävät sitä parempana. Jälleen kerran, tämä ”bonusmateriaali” ei ole kriittistä tässä esitettyjen peruskäsitteiden ymmärtämisen kannalta, ja voit halutessasi huoletta jättää sen väliin.
Muista myös, että tämä kirja ei ole tarkoituksella ”raamattu”. Se ei ole tyhjentävä katsaus kaikkiin käsiteltyjen aiheiden vivahteisiin; sellainen teos kattaisi useita hyllyjä. Tämän kirjan ensisijaisena tavoitteena on kuvata ja havainnollistaa yksinkertainen, modulaarinen ja edullinen menetelmä monimutkaisten sulautettujen järjestelmien toteuttamiseksi sekä esitellä joitakin valmiita moduuleja, joita lukija voi mukauttaa omiin projekteihinsa. Erityistä huomiota kiinnitetään kokonaisratkaisujen toteuttamiseen käyttämällä edullisia kehityslaitteita ja ilmaisia ohjelmistotyökaluja. Viimeisille sivuille tultaessa sinulla pitäisi toivottavasti olla seuraavat tiedot:
▪
Toiminnallinen ymmärrys kriittisistä ”konepellin alla” olevista yksityiskohdista, joita tarvitaan Linuxin käynnistämiseen x86-alustoilla.
▪
Johdatus siihen, minkä tyyppisiä ongelmia kohtaat käyttäessäsi sulautettuja x86-yksilölevyisiä tietokoneita tiedonkeruu- ja liikkeenohjausjärjestelmien ytimenä.
▪
Perustietoa Atmel AVR -mikrokontrolleriperheestä.
▪
Käytännönläheinen johdatus joidenkin yksinkertaisten tiedonkeruu- ja moottorinohjauspiirien rakentamiseen ja niiden liittämiseen tietokoneisiin.
▪
Joitakin perus ”alkeistietoja” tietoturvaan, todennukseen ja luotettavuuteen liittyvistä kysymyksistä, koska ne vaikuttavat sulautettuihin järjestelmiin.
Perusajatuksena on, että lukijalla on kohtuullisen läheistä kokemusta jommastakummasta Linux-sovelluskehitykseen liittyvästä aihepiiristä tai syvästi sulautettujen järjestelmien kehittämisestä – tämä kirja on suunniteltu pönkittämään oppimiskäyrän eturintamassa oleellisilla perusasioilla siitä, kumman puolen oppimiskäyräsi puuttuu. Se tarjoaa myös liiman, joka sitoo nämä tietopalat yhteen melko monimutkaisen projektin yleisessä kontekstissa. Huomaa muuten, että käytin otsikon sanaa ”keittokirja” hieman varovaisesti. Pelkkä keittokirjasuunnittelu – huonosti ymmärrettyjen osien kasaaminen yhteen kuin Capselan pallot – ei ole koskaan hyvä käytäntö. Tässä kirjassa annan sinulle joitakin valmiita Capsela-kappaleita, mutta kerron myös, miten ja miksi tein kunkin kappaleen hammaspyörät ja akselit, ja jossain määrin myös, miten voit edetä pidemmälle ja tehdä parempia kappaleita itsellesi. Nämä selitykset ovat paljon tärkeämpiä kuin itse kappaleiden piirustukset.
Tällaista kirjaa suunnitellessa on helppo langeta jompaan kumpaan kahdesta ansasta: joko luoda yksi ainoa, monoliittinen ”megasovellus”, joka havainnollistaa kaikki halutut seikat, mutta jota on äärimmäisen vaikea selittää lyhyesti, tai toisaalta pilkkoa aihe lukuisiksi pieniksi abstrakteiksi pieniksi muistiinpanoiksi, joita monien lukijoitten on hankala integroida todellisiin projekteihin. Olen yrittänyt tasapainoilla näiden kahden ääripään välillä pilkkomalla E-2-projektin mielenkiintoisemmat moduulit muutamaan pieneen käytännön sovellukseen yhdessä periaatteessa itsenäisen koodin kanssa ja tarpeeksi teoriaa, jotta näitä sovelluksia voi muokata ja laajentaa omiin käyttötarkoituksiin.
Viimeiseksi huomautus niille, jotka omistavat aiemman kirjani Sulautettujen järjestelmien kehittäminen kengännauhalla. Tätä kirjaa ei ole suunniteltu jatkoksi tuolle teokselle, mutta se on ehdottomasti aiheeseen liittyvää materiaalia. Jos noudatat tämän kirjan tekniikoita rakentaaksesi prototyyppilaitteen ja haluat myöhemmin puristaa sen optimoiduksi yhden sirun ratkaisuksi, aiempi teokseni auttaa sinua ymmärtämään, miten voit käyttää ilmaisia GNU-työkaluja saadaksesi ohjelmasi helposti siirrettyä ARM-mikrokontrollerille. Tärkeimmät kritiikit, joita sain tuosta aiemmasta kirjasta, olivat, että sen olisi pitänyt kattaa laajempi tietovalikoima ja että siinä oli liian vähän kuvitusta, mikä teki siitä melko kuivaa luettavaa. Olen kuunnellut näitä kommentteja, ja toivon, että tämä kirja vastaa tarpeitasi molemmilta osin. Kuten aina, kommenttinne ja ehdotuksenne ovat tervetulleita; voitte lähettää minulle sähköpostia osoitteeseen tai vierailla verkkosivuillani osoitteessa http://www.zws.com/.
.