Sulautetut järjestelmät¶
Osaamistavoitteet: Tämän materiaalin läpikäytyäsi tiedät mitä ovat sulautetut järjestelmät, mitä laiteläheinen ohjelmointi (ts. sulautettujen järjestelmien ohjelmointi) tarkoittaa ja mitkä ovat sen erityispiirteet, sekä miten sulautettuja laitteita ohjelmoidaan nykyisillä kehitysympäristöillä.
Miksi sulautetut järjestelmät?¶
"Sulautettu järjestelmä (engl. embedded system) on tiettyyn tarkoitukseen tehty laite tai laitteisto, jota ohjaa tietokone. Sille on tyypillistä, että käyttäjän ei tarvitse olla tietoinen laitteen sisällä olevasta tietokoneesta, vaikka voikin sen olemassaolon helposti päätellä." (Wikipedia, mukaillen)
Sulautettuja järjestelmiä käytetään hyvin laajalti nykyään eri sovellusalueilla:
- Kodinkoneet, kotiautomaatio, viihde-elektroniikka, älypuhelimet, ...
- Autot (useita sisäisiä sulautettuja järjestelmiä..), logistiikka, tehdasautomaatio, ...
- Terveysteknologia (sykemittarit yms), sairaalalaiteet, ...
- Tulevaisuutta: älykkäät ympäristöt, puettava tietotekniikka, ...
Sulautettu järjestelmä töissä.. ja harrastuksena. Helpompaa miltä näyttää!
Esineiden Internet¶
Kurssilla toimimme Esineiden Internet:ssä (Internet of Things, IoT) ympäristössä. IoT on maailmanlaajuinen on laitteiden ekosysteemi, jossa miljardit verkotetut esineet ja laitteet kommunikoivat keskenään Internetin kautta. Tämä mahdollistaa uusia älykkäitä palveluita ja sovelluksia kuluttajille, yrityksille ja yhteiskuntaan, kun yksittäiset laitteet ja sovellukset tuottavat dataa ympäristöstään ja toiminnastaan ja voivat liittyä osaksi ekosysteemiä jakaen informaatiota ja hyödyntäen sen palveluita. Sovellusesimerkkejä ovat esimerkiksi erilaisten reaaliaikaisten tapahtumien seuraaminen urbaanissa ympäristössä: liikenteen sujuvuus, kaupunkien/asuntojen energiankulutus, ihmisen toimintojen seuraaminen (terveysteknologia), kodintekniikan ohjaus etänä, jne..
Lyhyt Internet of Things-esittelyvideo.
Sulautetun laitteen osat¶
Sulautettu järjestelmä (engl. embedded system) on siis pienoistietokone, joka on kehitetty ja toimii vain tiettyä käyttötarkoitusta varten. Tällöin työasemaan verrattuna sulautetussa laitteessa tyypillisesti on vain ne tietokoneen tarpeelliset osat, jotka tarvitaan juuri siihen tarkoitukseen. Sulautetun laitteen toiminta IoT-maailmassa yleisesti perustuu datan keruuseen ympäristöstä käyttäen laitteeseen integroituja antureita. Niiden keräämästä datasta laitteeseen kirjoitettu ohjelma tyypillisesti analysoi yksinkertaisia tapahtumia ja ohjaa jotain isompaa järjestelmää näihin tapahtumiin.
Käyttäjälle sulautetun laitteen näkyvin osa on käyttöliittymä, joka koostuu fyysisistä komponenteista, kuten painonapeista, kosketusnäytöstä, tms, joilla käyttäjä voi antaa syötteen laitteelle. Käyttäjälle palautetta laite antaa esimerkiksi LCD-näytön kautta. Sulautetussa laitteessa ei kuitenkaan tarvitse käyttötarkoituksesta riippuen olla käyttöliittymää, esimerkiksi jos se toteutetaan osaksi ohjausjärjestelmää vaikkapa auton sisuksissa.
Tietokoneen laskentayksikön ja tiedonkäsittelijän roolia sulautetussa laitteessa hoitaa mikrokontrolleri, jossa laatimamme sulautettu tietokoneohjelma pyörii. Tästä kohta lisää..
Sulautetun laitteen ohjelma reagoi syötteisiin (engl. input), esimerkiksi painonappi, anturin (eng. sensor) mittausarvo tai langattoman radion kautta tuleva viesti. Tyypillisesti ohjelma tuottaa jonkin vasteen (output) ohjelmointinsa mukaisesti kyseiseen inputtiin, esimerkiksi aktuaattorin avulla käynnistää pesuohjelman tai näyttää käyttäjän tekemän valinnan käyttöliittymässä tai lähettää sensoridatan langattomasti eteenpäin.
Laitteessa voi olla myös massamuistia, esimerkiksi SD-kortti, datan pitempiaikaista tallentamista varten. Sulautettu laite tarvitsee tietenkin virtalähteen, joka liikkuvassa laitteessa on tyypillisesti akku tai ladattava paristo.
Näistä komponenteista laitteen suunnittelija valitsee ne, joita sovellus tarvitsee, ja kirjoittaa halutun ohjelman. Lyhyt video miten sulautettu järjestelmä toimii.
Mikrokontrolleri¶
Käsite mikrokontrolleri (myos mikro-ohjain, MCU) tarkoittaa, että yhdelle mikropiirille on toteutettu sekä prosessori (CPU) että muita sähköisiä komponentteja. Sulautetun laitteen mikrokontrolleria vastaa tietokoneen prosessori, mutta sen ominaisuuksia on riisuttu verrattuna esimerkiksi PC-työasemissa oleviin prosessoreihin. Mikrokontrolleri toimii pienellä kellotaajuudella ja siinä on vähäinen määrä muistia, joka on vielä jaettu erilliseen ohjelmamuistiin (ROM, Read Only Memory, esim. Flash) ja ohjelmien käytössä olevaan keskusmuistiin (RAM, Random Access Memory). Muistit voivat sijaita myös piirikortille integroiduissa erillisissä piireissä.
Nykyään sulautetuissa laitteissa, esim. älypuhelimessa tai autossa, on useita mikrokontrollereita, joista jokainen suorittaa omaa tehtäväänsä. Esimerkiksi, yksi MCU pyörittää laitetta, toinen keskittyy langattomaan tiedonsiirtoon ja kolmas ohjaa näyttöä. Näin saadaan laitteen ja sovellustentoimintaa tehokkaammaksi jakamalla suorituskuormaa useiden mikrokontrollerien kesken.
Kurssin sulautettu laite¶
Kurssilla käytettävä sulautettu laite on Texas Instruments:n Simplelink SensorTag (SensorTag meidän kesken), joka tarjoaa oivallisen näköalan nykyiseen IoT-maailmaan!
Laitteen sydämenä on moderni 32-bittinen mikrokontrolleri, johon on integroitu langaton radio tiedonsiirtoa varten. Laitteen piirikortilla on lisäksi integroituna kymmenkunta liikettä ja ympäristöä mittaavaa anturia (kiihtyvyys-, asento-, lämpötila-, valo-, ilmankosteus- ja ilmanpaineanturi sekä magnetometri, kompassi ja mikrofoni). Samalla piirilevyllä on myös painonappeja, ledejä ja pieni kaiutin. Ulkoisina lisäkomponentteina laitteelle saa mm. LCD-näytön, jota käytämmekin tällä kurssilla.
SensorTagiin integroitu radio tarjoaa useita eri teknologioita langattomaan tiedonsiirtoon, joista kurssilla käytämme 6LoWPAN-teknologiaa 2.4GHz taajuuskaistalla (nyt teknologian yksityiskohtia ei tarvitse kurssilla tietää). Opetushenkilökunta on toteuttanut valmiin kirjaston tiedonsiirtoon laitteiden välillä.
Alla SensorTag:n esittely kuvina. SensorTag ja LCD-näyttö -kombo toimii vaikkapa älykellona!
Laite toimii oikein ohjelmointuna kolikkopatterilla jopa viikkoja, johtuen tarkasti optimoidusta mikrokontrollerin ja oheiskomponenttien virrankulutuksesta.
Sulautettu järjestelmä vs. PC¶
Verrattuna yleiskäyttöisiin PC-työasemiin, sulautettu järjestelmä on siis kehitetty ja toimii vain tiettyä vaatimatonta käyttötarkoitusta varten. Näissä sovelluksissa tarve laskentakapasiteetille, muistille ja muille tietokoneen ominaisuuksille on tyypillisesti vähäinen. On siis kustannustehokasta käyttää yleiskäyttöisen PC-laitteiston tilalta sulautettua laitetta, jonka valmistuskustannukset ovat pienemmät.
Esimerkki: PC:n ja sulautetun laitteen eroja laitteistonäkökulmasta
Tyypillinen PC | Sulatettu laite | |
Kellotaajuus | 1-4GHz | 1-70Mhz |
Muisti | 1-16GB | 1-16kB |
8-256kB Flash-ohjelmamuisti | ||
16B-4kB haihtumatonta EEPROM-muistia | ||
Prosessori | 64bit | 8bit / 16bit / 32bit |
Massamuisti | 1TB | Oheislaite, esim. SD-muistikortti |
Liitännät | Integroitu äänikortti | Pieni summeri |
Näytönohjain | LCD-näyttö | |
Näppäimistö ja hiiri | Painonappi, liukusäädin tai kosketusnäyttö |
Itseasiassa, moderni PC käyttää useita oheislaitteita, joissa pyörii oma sulautettu järjestelmä, esimerkiksi näppäimistö tai aiemmin modeemi.
Ohjelmien suorittaminen¶
Ohjelmien suorittamisessa PC:ssä ja sulautetussa laitteessa on merkittäviä eroja. PC:ssä ohjelmia ajetaan aina käyttöjärjestelmän (Windows, DOS, Mac OS X, linux) päällä, mutta sulautetuissa järjestelmissä on vaihtoehtoja.
Jos sulautetussa laitteessa on käyttöjärjestelmä, se on tyypillisesti riisuttu versio PC-käyttöjärjestelmästä tarjoten minimipalvelut ohjelmille käyttää laitteistoresursseja. Näistä lisää SensorTagin osalta kurssimateriaalissa ja myöhemmin Käyttöjärjestelmät-kurssilla.
Käyttöjärjestelmää usein ei ole ollenkaan. Sen tilalta sulautetuissa laitteissa on laiteohjelmisto (engl. firmware), joka kytkee sulautetun laitteen (ja yleisesti työaseman) eri laitteistokomponentit yhteen toimivaksi tietokoneeksi. Kun laite käynnistetään, firmis käynnistyy ensin ja muut ohjelmat vasta sen jälkeen. Muut ohjelmat eivät osaisi käyttää oheislaitteita ilman firmiksen tarjoamia alimman tason palveluita ja/tai laiteajureita. Sulautetuissa firmis myös tarjoaa ohjelmoijalle asti näkyviä kirjastoja ja korkeamman tason ohjelmointiabstraktioita, piilottaen laitteen matalan tason toimintaa. Tunnettu esimerkki sulautetusta firmware:sta on Arduino-laitealustat, joissa firmware käännetään osaksi sulautettua ohjelmaa.
PC-maailmassa laiteohjelmiston toteuttaa BIOS. Tosin BIOS:n palveluita käytetään käyttöjärjestelmän kautta.
Sulautettua laitetta on myös mahdollista ohjelmoida ilman laiteohjelmistoa, tällöin oma ohjelmamme itseasiassa toteuttaa "laiteohjelmiston". Nyt ohjelmoijan pitää tehdä vaaditut oheislaitteiden käynnistykset ja alustukset itse, joka toisaalta edellyttää syvempää ymmärrystä MCU:n ja oheislaitteiden toiminnasta. Mutta näin laitteen toimintaa voidaan optimoida vielä astetta tarkemmin.
Tällä kurssilla SensorTag:lle tehdään ohjelmia valmistajan käyttöjärjestelmän päälle. Laitetta ohjelmoidessa käytämme (tietämättämme..) firmiksen palveluita.
Sulautetun laitteen ohjelmointi¶
Tyypillisesti sulautettuja järjestelmiä ohjelmoidaan C-kielellä (ja myös C++:llä). Vaikka C-kieli on kehitetty jo 1970-luvulla, tarjoaa se matalan tason ohjelmointikielenä mahdollisuuden kirjoittaa tiiviitä, nopeita ja sitä myöten tehokkaita ohjelmia juurikin sulautetuille järjestelmille. C-kieli on erittäin salliva kieli, päästäen ohjelmoijan tekemään monia asioita, jotka eivät muissa kielissä onnistu.
Nykyään ohjelmointia sulautetulle laitteelle tehdään PC-ympäristössä laitevalmistajien yleensä ilmaisilla kehitystyökaluilla. Sulautetun laitteen ohjelmoinnissa on kaksi vaihetta.
- Ensin C-kielinen ohjelma käännetään kääntäjäohjelmalla työasemassa valitun mikrokontrollerin ymmärtämään muotoon, sen konekielelle.
- Sen jälkeen konekielinen ohjelma kirjoitetaan (ladataan / flashataan) erillisellä ohjelmointilaitteella sulautetun laitteen ohjelmamuistiin.
Tämän jälkeen, kun mikrokontolleri käynnistyy, se lähtee automaattisesti ajamaan ensin firmistä ja sitten ohjelmamuistissa olevaa ohjelmaa. Ohjelmaa tyypillisesti ajetaan, kunnes laitteen virrat katkaistaan.
Näin ollen sulautettuja laitteita ei voi ohjelmoida tulkin kautta, kuten Pythonin kanssa tehtiin. Ammattilaiskäyttöön on kuitenkin olemassa emulaattoreita / simulaattoreita, joissa ohjelmaa voi ajaa debug-tilassa ja jopa kuten tulkissa ohjelmoida ajonaikaisesti.
Alla kuvassa SensorTag:n ohjelmointi- ja debuggauslaite, jota käytämme kurssilla. Laite kytketään PC:hen USB-liittimen kautta.
Kurssilla SensorTag:ia ohjelmoidaan C-kielellä valmistajan pilvipalvelussa (CCS Cloud) Web-selaimen kautta työasemalla. Opiskelijat voivat myös käyttää omalla koneella valmistajan monipuolisempaa TI Code Composer Studio-ohjelmointiympäristöä. Asennus onnistuu ainakin Windowsille ja linuxille ja Macille (kuulemma..). CCS tarvitsee lisenssin, jonka saa kurssin lainalaitteen mukana.
Haasteita¶
Yleisesti sulautettua järjestelmää suunniteltaessa ja ohjelmoidessa on kiinnitettävä huomiota mm. seuraaviin asioihin:
- Pieni prosessorin laskentateho rajoittaa laskentakapasiteettiä ja silti laitteistolla voi olla tiukat aikavaatimukset, esimerkiksi tehdassovelluksissa.
- Muistinkulutus, koska pieni muistimäärä rajoittaa laskenta- ja tiedonsiirtokapasiteettia.
- Rajoitettu kommunikointi oheislaitteiden kanssa asynkronisesti, eli input / heräte oheislaitteelta voi tulla milloin vain ohjelmamme kannalta, esimerkiksi viesti toiselta laitteelta langattoman radion kautta, johon laite ohjelmansa mukaisesti reagoi. Tämä reagointi on usein sulautetun laitteen ainoa toiminto! Esimerkiksi avaa/sulje autotallin ovi kaukosäätimellä lähetetun komennon mukaisesti.
- Laitteessa ei ole käyttöjärjestelmää, tai jos on, niin hyvin riisuttu reaaliaikakäyttöjärjestelmä.
- Akku- tai patterikäyttöisen sulautetun laitteen tehonkulutus. Usein ohjelmaa ja oheislaitteiden toimintaa optimoidaankin jo suunnitteluvaiheessa tehonkulutuksen pienentämiseksi
Näihin asioihin palaamme sitten tarkemmin kurssimateriaalissa..
Lopuksi¶
Sulautettujen järjestelmien laitealustoja löytyy (muutamalla kympillä) harrastajille kotikäyttöön kaikilta mikrokontrollerivalmitajilta. Tunnetuin lienee ATmelin 8-bittisiin mikrokontrollereihin perustuva harrastajakäyttöön sopiva Arduino. Arduino tarjoaa hyvin korkean tason C++:n perustuvan ohjelmointikielen laitealustalle ja tavoite on, että Arduinon ohjelmointi onnistuukin vähäisellä ohjelmointikokemuksella. Esimerkkinä, Arduinoa käytetään digitaalisen median opetuksessa. Tälle kurssille Arduino on liian yksinkertaistettu laite.
Toinen tunnettu laitealusta, Raspberry Pi luetaan usein myös sulautetuksi laitteeksi, mutta siinä on jo ominaisuuksia niin kattavasti, että kyseessä on enemmänkin single-board computer. RPi:ssä ajetaan myös linux-käyttöjärjestelmää, joka on vastaavasti aivan liian raskas Arduinolle. Jotkut eivät pidä RPi:tä varsinaisena sulautettuna laitteena, vaikka senkin voi kyllä upottaa ympäristöön tai laitteeseen, siinä missä Arduinonkin.
SensorTagille on julkaisut ulkoisia oheislaitteita DevPack-rajapinnan kautta, jotka on myös julkaistu avoimesti verkossa. Kuka tahansa voi siis toteuttaa laitteelle omia lisäkomponentteja.
Anna palautetta
Kommentteja materiaalista?