Professional Documents
Culture Documents
Tietokoneohjelman tekeminen
7.1.2008. pva, kuvat jma
Yleistä
Tietokone tekee kaiken sen - ja vain sen - mitä ohjelmoija ohjelmassa määrittää. Ohjelma on
tietokoneen toimintaohje, joka koostuu peräkkäisistä komennoista eli käskyistä. Käskyt on tallennettu
ohjelmamuistiin, josta ne haetaan yksi kerrallaan ja viedään mikroprosessorin käskynkäsittely-
yksikköön, jossa ne tulkitaan ja tehdään käskyn määräämä pieni, hyvin yksinkertainen toiminto.
Riittävän paljon erilaisia pieniä toimintoja, hyvin, hyvin nopeaan tahtiin peräjälkeen suoritettuna
muodostaa ajettavan ohjelman.
Ohjelmia on joka lähtöön. Yksi mahdollistaa kännykän puheliikenteen, toinen punnitsee kaupan
hedelmätiskillä banaanipussin painon ja kolmas laskee ostoksen hinnan ja vielä tulostaa
viivakooditarran.
1
2.1. Tietokoneohjelman tekemisen eri vaiheet
Tutkitaan ohjelmantekoprosessia ensin kaaviokuvalla. Kuvahan kertoo enemmän kuin sata sanaa. Sen
avulla voi nopeasti hahmottaa monimutkaisiakin asioita, siis mitä ollaan tutkimassa tai tekemässä.
On hyvin tärkeää, että ohjelma oikeasti suunnitellaan, eikä vaan ajauduta summittaisen yritys- ja
erehdys-systeemin kautta epätoivoon. Kunnollinen suunnittelu antaa työskentelyyn ryhtiä ja luo
kestävän perustan jolle varsinainen koodi rakennetaan. Aivo- ja käsityönä. Suunnittelu tulee tehdä
ensimmäisenä, ennen ensimmäisenkään koodirivin kirjoittamista.
Kokemus on osoittanut, että ohjelma kannattaa suunnitella ’ylhäältä alas’, top down. Hahmotetaan
ensin kokonaisuus ja jaetaan sitten tämä pienempiin, helpommin hallittaviin osiin, moduuleihin. Jos
moduulit suunnitellaan itsenäisiksi toimintakokonaisuuksiksi, joista voi kirjoittaa itsenäisiä funktioita,
niin varsinainen koodin kirjoittaminen ja testaaminen helpottuu oleellisesti.
2
Varsinkin sulautetuissa järjestelmissä asia voidaan, ja joskus kannattaakin (riippuu tapauksesta), tehdä
toisin päin, alhaalta ylös. Jos tehdään esimerkiksi termostaatti, tehdään ensin mittaussysteemi, joka
testataan huolellisesti. Sitten tehdään erikseen asetusarvon syöttö, ja toimilaitteen ohjaus, jotka samoin
testataan. Lopuksi kirjoitetaan pääohjelma, joka vain mittaa, vertaa ja ohjaa.
Jokainen ymmärtää, että suunnitteluprosessi on aivan erilainen, jos kännykkätehtaan ympäri maailmaa
hajautetut asiantuntijaryhmät pitää ohjata tekemään uutta matkapuhelinsukupolven ohjelmaa, tai jos
yksinäinen koodaaja päättää tehdä ohjelman (ja elektroniikan), joka pyörittää tuuletinta lämpötilan
ylittäessä tietyn raja-arvon. Ensimmäinen on hyvinkin pitkä, erittäin sosiaalinen ja moniulotteinen
prosessi, jälkimmäinen individualistin yksinäistä puuhastelua.
Mikro-ohjaimen ohjeet tehdään aivan samalla tavalla. Analyysi tehdään ’selväkielisenä’. Varsinainen
tehtävä on ensin jaettava sellaisiin osiin, jotka ohjelmassa suoritetaan erikseen.
Tapauksesta riippuen, mietitään mm:
- millaisiin osiin, moduuleihin, tehtävä kannattaa jakaa
- mitä I/O-portteja ja/tai oheiskomponentteja tarvitaan
- tarvitaanko käyttöjännitteen lisäksi muita jännitteitä
- tarvittavien syöttö- ja tulostustietojen/ohjaussignaalien muotoa ja sisältöä
- mitä tulevalle tiedolle tehdään, mihin pyritään, mitä sillä ohjataan
- mietitään erikoistapaukset
- mitä tehdään, jos ’jokin menee pieleen’
3
2. Algoritmi
Algoritmi vastaa kysymykseen, ’mitä pitää tehdä ja missä järjestyksessä, jotta tavoite
saavutetaan?’
Algoritmin kirjoittaminen
Ongelman ratkaisun kuvaus voidaan tehdä monella eri tavalla.
1. Matemaattinen malli
- esimerkkinä vaikka lukujärjestelmämuunnokset.
2. Vuokaavio
- joka etenee kuva kuvalta kohti ratkaisua.
3. Pseudokieli, -koodi
- lopullista ohjelmakoodia jäljittelevää tekstiä
Pseudokieli
Pseudokieli on selväkielistä tekstiä, siis ihmiselle tarkoitettu kuvaus mitä ollaan tekemässä. Se on
sekoitus suomea (englantia) ja C-kielen termejä, joilla kuvataan tehtävän suoritusaskeleet. Jokaisesta
moduulista (funktio) kirjoitetaan oma pseudokoodi.
4
Pseudokoodin kirjoittaminen aloitetaan sitten, kun ensin on selvitetty perusteellisesti, mikä on ongelma,
mitä ollaan tekemässä, mikä on toimintaympäristö, mitä se edellyttää ohjelmalta. Esim. kännykän
ohjelman tekemisessä itse koodin kirjoittaminen sujuu, kunhan ensin on kirjoitettu toimiva algoritmi
(tai oikeastaan toimivat algoritmit). Sen tekeminen on suuritöinen ja vaikeasti hallittava prosessi, koska
ensin pitää selvittää järjestelmän toiminta, mitä kaikkia signaaleja ja datoja se käsittää, millaisia ne
ovat, millä ajanhetkellä ja millä ehdoilla ne ovat voimassa, mitä niille voi ja saa ja pitää tehdä ja
milloin, jne.
Tehtävä:
Mikrotietokoneella mitataan huoneen lämpötila minuutin väliajoin, tallennetaan arvot muistiin ja
tulostetaan ne LCD-näyttöön. Jos raja-arvo ylittyy, annetaan hälytys.
Pseudokoodi
Alku
luo taulukko
ja aseta rekisterit alkuarvoihin // CPU, keskeytys- ja timer-rekisterit ja LCD-näyttö
5
Kuva 2.2.3. Vuokaavioesitys.
Algoritmi kirjoitetaan ihmisen ajattelua varten, mutta koko ajan miettien, miten työ on tietokoneella
tehtävissä. Hyvin tehdystä algoritmista on helppoa kirjoittaa itse ohje, eli ohjelma tietokoneelle.
Parhaimmillaan ohjelmalauseet vain ’pudotellaan’ ruudulle algoritmin ohjaamana.
3. Lähdekoodin kirjoittaminen
Ulkopuoliselle ohjelmointi näyttää tietokoneen ääressä istumiselta ja ’cokiksen’ juomiselta, mitä nyt
välillä naksutellaan näppäimistöä. Mutta se on aivan muuta.
6
Tietokoneelle annettavien toimintaohjeiden on oltava yksityiskohtaisia ja yksikäsitteisiä, konkreettisia.
Sokerikakun tekijälle riittää suurpiirteinen, abstrakti ohje.
Ohjelma:
- aluksi kirjoitetaan ohjelma jollakin ihmisen ymmärtämällä ohjelmointikielellä
- sitten se käännetään käänninohjelmalla tietokoneen ymmärtämäksi konekieleksi.
Itse ohjelma voidaan toteuttaa millä kielellä tahansa, kunhan sille löytyy käytettävälle
mikro-ohjaimelle koodia tekevä käänninohjelma.
4. Lähdekoodin kääntäminen
Usein C-käännin generoi varsinaisen käännetyn koodin lisäksi monta muuta tiedostoa. Niitä voi
hyödyntää ohjelmavikojen etsinnässä tai koodin toiminnan optimoinnissa.
5. Mikro-ohjaimen ohjelmointi
Ajokelpoinen koodi on siirrettävä PC:n muistista mikro-ohjaimen ohjelma-muistiin. Sen tekee erityinen
latausohjelma (ohjelmointiohjelma), joka siirtää koodin PC:ltä kirjoitin-, sarja-, tai USB-portin kautta
ohjelmointikaapelia pitkin mikro-ohjaimen ohjelmointiliitäntään. Harvemmin nykyään käytetään
erillistä ohjelmointilaitetta.
Ohjelma:
- sellaisia peräkkäisiä binäärilukuja (ykkösiä ja nollia) ohjelmamuistissa,
jotka CPU osaa tulkita transistorien ohjausjännitteiksi.
7
6. Ohjelman testaus ja virheiden etsintä, debuggaaminen
Ohjelman loogiset virheet tulevat esille vasta ajamalla sitä oikeassa toimintaympäristössä. Jos nyt
ilmenee virheitä, taas on miettimisen paikka. Korjaa virhe vasta, kun tiedät tarkalleen, mikä sen
aiheuttaa ja miten se korjataan. Muuten saattaa tapahtua niin, että ’korjauksen’ seurauksena syntyy
uusia, entistä vaikeampia virheitä.
Testauskin kannattaa tehdä palasina. Siis ohjelmaa pitää testata kaiken aikaa, sitä mukaa kuin se
valmistuu. Jos suinkin mahdollista funktio kerrallaan. Silloin ongelmien ilmetessä ei niitä tarvitse etsiä
suuresta koodikokonaisuudesta, vaan vian etsiminen voidaan kohdistaa pieneen, tarkasti määriteltävään
ohjelman osaan. Kun kaikki moduulit on valmiina ja yksittäin testattuna, kokonaisuuden testaus tuskin
aiheuttaa ongelmia.
Simulaattori
on eräs tällainen testaustyökalu, se matkii mikro-ohjaimen toimintaa. Simulaattori on PC:ssa ajettava
ohjelma, jonka avulla testataan ohjelman toiminta (etsitään mahdolliset virheet) ennenkuin itse
”sulautettua rautaa” on saatavillakaan.
Emulaattori
on toinen tärkeä testaus- ja debuggaustyökalu. Siinä tutkittava ohjelma ajetaan oikeassa ympäristössä,
tässä tapauksessa AVR-mikro-ohjaimessa. Emulaattori tuo PC:n ruudulle näkyviin kaiken mitä mikro-
ohjaimen sisällä rekistereissä tapahtuu, siis juuri testattavassa laitteessa ja reaaliajassa.
o ohjelmakoodia voidaan ajaa AVR:ssa käskyrivi kerrallaan
o ohjelmasuoritus voidaan pysäyttää jonkin ehdon perusteella (breakpoint)
o suorituksen aikana voidaan seurata ja muutella
rekistereitä, I/O-portteja
muistipaikkoja
muuttujia
Erikoisesti ohjelmoinnin opiskelussa emulaattori on kelpo apulainen. Samalla sen avulla opitaan
tehokkaasti mikro-ohjaimen toiminta (”mitä siellä CPU:ssa oikeesti tapahtuu”).
Dokumentointi on tärkeä osa ohjelmaprojektia, varsinkin jos tehdään isompaa, aikaa ja monta
ohjelmoijaa vaativaa työtä. Ilman kunnon dokumentointia ohjelman ylläpito (päivitykset, muutokset,
korjaukset) on lähes mahdotonta. Sen merkityksestä saa käsityksen kun tietää, että (muille) hyödyllisen
dokumentin tekeminen vie aikaa usein enemmän kuin itse koodin kirjoittaminen. Siksi isoissa
ohjelmistoprojekteissa on kullakin ohjelmoijaryhmällä (noin tusina ammattilaisia) oma laatuinsinööri.
8
Hän on henkilö joka valvoo, että kukin koodaaja tekee yhtiön normin mukaista koodia ja samalla
kunnon dokumentointia työstään ja että se vielä valmistuu ajallaan.
Jos aikoo ammattilaiseksi, pitää heti opetella oikeat työmenetelmät. Pienissäkin projekteissa
dokumentin tekeminen kannattaa aloittaa samanaikaisesti itse ohjelman suunnittelun kanssa.
Lopputuloksen tulee olla sellainen, jota itse kaipaa silloin, kun ottaa toisen tekemän ohjelmiston
vastuulleen.
1. Tiedot ohjelmasta
- ohjelman nimi ja ohjelman tekijä ja päivämäärä
- mikro-ohjain, jolle ohjelma kirjoitettu
- mihin tarkoitukseen ohjelma on tehty, mitä se tekee
2. Ohjelman rakenne
- yleinen rakenne
- pääohjelma main() ja funktiot
- yksityiskohtainen rakenne pseudokoodina
- C-kielinen ohjelman listaus
- lähtö- ja tulostiedot
3. Ohjelman testaus
- testiaineisto