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, 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 ekosysteemi, jossa miljardit 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 voivat liittyä osaksi tätä ekosysteemiä ja hyödyntää 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 tarpeelliset osat. Käyttäjälle sulautetun laitteen näkyvin osa on käyttöliittymä, joka koostuu fyysisistä komponenteista, kuten painonapeista, kosketusnäytöstä, tms. 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 isompaa ohjausjärjestelmää vaikkapa auton sisuksissa.
Tietokoneen laskentayksikön ja tiedonkäsiottelijä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 (Flash) ja ohjelmien käytössä olevaan keskusmuistiin (RAM).
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 sovellusten suorituskuormaa jaettua mikrokontrollerien kesken.
Kurssin sulautettu laite¶
Kurssilla käytettävä sulautettu laite on Texas Instruments:n Simplelink SensorTag (SensorTag meidän kesken), joka tarjoaa varsin hyvän näköalan nykyiseen IoT-maailmaan!
Laitteen sydämenä on moderni 32-bittinen mikrokontrolleri, johon on integroitu radio langatonta 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 | 320GB | 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ö |
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, 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. Näistä lisää SensorTagin osalta kurssimateriaalissa ja myöhemmin Käyttöjärjestelmät-kurssilla.
Käyttöjärjestelmää ei usein kuitenkaan ole ollenkaan. Sen tilalta sulautetuissa laitteissa on laiteohjelmisto (engl. firmware), joka kytkee sulautetun laitteen (ja yleisesti työaseman) eri laitteistokomponentit toimivaksi tietokoneeksi. Kun laite käynnistetään, "firmis" käynnistyy ensin ja muut ohjelmat vasta sen jälkeen käyttäen firmiksen palveluita. Sulautetuissa firmis myös tarjoaa ohjelmoijalle asti näkyviä kirjastoja ja korkeamman tason ohjelmointiabstraktioita, piilottaen laitteen matalan tason toimintaa. PC:ssä firmiksen palveluita käytettäisiin käyttöjärjestelmän kautta.
Tunnettu esimerkki sulautetusta firmware:sta on Arduino, jossa firmware käännetään osaksi sulautettua ohjelmaa. PC-maailmassa laiteohjelmiston toteuttaa BIOS.
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.
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. Kun mikrokontolleri käynnistyy, se lähtee automaattisesti ajamaan ohjelmamuistissa ensimmäisenä olevaa ohjelmaa ja ajaa sitä kunnes 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 prosessoriteho rajoittaa laskentakapasiteettiä ja silti laitteistolla voi olla tiukat aikavaatimukset, esimerkiksi tehdassovelluksissa
- Muistinkulutus, 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ä reaktio voi olla sulautetun ohjelman ainoa toiminto.
- Laitteessa ei ole käyttöjärjestelmää, tai jos on, niin hyvin riisuttu reaaliaikakäyttöjärjestelmä
- Akku- tai patterikäyttöisen laitteen tehonkulutus. Usein ohjelmaa ja oheislaitteiden toimintaa optimoidaankin 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 ohgeislaitteita DevPack-rajapinnan kautta, jotka on myös julkaistu avoimesti verkossa. Kuka tahansa voi siis toteuttaa laitteelle omia lisäkomponentteja.
Anna palautetta
Kommentteja materiaalista?