3. C-kieli sulautetun järjestelmän ohjelmointikielenä 07.01.2008, pva



Samankaltaiset tiedostot
Laiteläheinen C-kieli, yleistä

4. Lausekielinen ohjelmointi 4.1

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Tietokoneohjelman anatomia Mikä on tietokoneohjelma ja tietokonekieli

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

4. Lausekielinen ohjelmointi 4.1

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

BL40A1810 Mikroprosessorit, harjoitus 1

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Tähtitieteen käytännön menetelmiä Kevät 2009

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

Koodaamme uutta todellisuutta FM Maarit Savolainen

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Älykännykät ovat pieneen tilaan paketoituja, mutta suuret ominaisuudet omaavia tietokoneita.

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

Mikro-ohjain µc harjoitukset - yleisohje

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

2.2. Tietokoneohjelman tekeminen pva, kuvat jma

ELM GROUP 04. Teemu Laakso Henrik Talarmo

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

1. Olio-ohjelmointi 1.1

Ohjelmointi 1. Kumppanit

Tietorakenteet ja algoritmit

Ohjelmoinnin perusteet Y Python

CUDA. Moniydinohjelmointi Mikko Honkonen

ITKA203 Käyttöjärjestelmät, kesä Kesäkurssi Opettaja: Paavo Nieminen

Laiteläheinen C-kieli, mitä C-käännösprosessissa tapahtuu

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

.NET ajoympäristö. Juha Järvensivu 2007

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Kontrollerin sisäisten komponenttien käytöstä. Vielä vähän asiaa sisäisten lohkojen käytöstä

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

11/20: Konepelti auki

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

AVRStudion käyttö debuggaukseen. Emulaattori pva

Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).

Laiteläheinen C-kieli osa 1 pva

1. Ohjelmoinnin peruskäsitteet ja -elementit

Tietotekniikan koulutusohjelman suuntautumisvaihtoehdot

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Laiteläheinen C-kieli, hello.c

Algoritmit 1. Luento 3 Ti Timo Männikkö

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

Test-Driven Development

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin perusteet Y Python

Tutoriaaliläsnäoloista

Test-Driven Development

Ohjelmistojen mallintaminen, mallintaminen ja UML

Kääntäjän virheilmoituksia

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

IDE asennus, Integrated Development Environment Atmelin AVR-mikro-ohjaimille pva

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

15. Ohjelmoinnin tekniikkaa 15.1

Apuja ohjelmointiin» Yleisiä virheitä

Loppukurssin järjestelyt C:n edistyneet piirteet

Common Language Runtime

Käyttöjärjestelmän rakenne

Ohjelmistojen mallintaminen

Loppukurssin järjestelyt

16. Ohjelmoinnin tekniikkaa 16.1

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ohjelmoinnin perusteet Y Python

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

KYMENLAAKSON AMMATTIKORKEAKOULU

C++ Ohjelmoijan käsikirja. Johdanto

Ohjelmoinnin peruskurssien laaja oppimäärä

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

16. Ohjelmoinnin tekniikkaa 16.1

Tietorakenteet ja algoritmit - syksy

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

13/20: Kierrätys kannattaa koodaamisessakin

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

12 Mallit (Templates)

Ohjelmoinnin perusteet Y Python

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Transkriptio:

3. C-kieli sulautetun järjestelmän ohjelmointikielenä 07.01.2008, pva "Ohjelmointi ei ole mitään massojen huvia, vaikka sitä joskus helpoksi luullaankin. Joiltakin se sujuu luonnostaan, jotkut voivat jopa oppia sen." - Jere Käpyaho Sisältö 3.1. Mikä on ohjelmointikieli? 3.2. Sulautetun järjestelmän ohjelmointikielen tulee olla: Miksi sulautetut järjestelmät ohjelmoidaan C-kielellä? 3.3. Sulautetut järjestelmät ja ANSI C Mikä on C99? Miksi C eikä asm? 3.1. Mikä on ohjelmointikieli? Ohjelmointikielen määritykseen on monta tapaa; Ohjelmointikieli on väline, jolla ihminen kertoo tietokoneelle mitä se tulee tehdä. Opettaja Ohjelmointikieli on ohjelmien esittämiseen tarkoitettu, prosessorikohtaiseen konekieleen käännettävissä oleva kieli. Tietosanakirja Ohjelmointikieli on joukko käsitteitä, jolla ohjelmoija määrittelee algoritmin rajaamat suoritettavat tehtävät. Ohjelmoija Ohjelmointikieli on työkalu, joiden avulla ohjelmoija miettii, mitä on mahdollista tehdä ja mitä ei. Tietokone ei tiedä yhtään mitään, eikä se pysty ajattelemaan abstrakteja asioita samalla lailla kuin ihminen. Ihminen osaa tulkita hyvinkin monimutkaisia kuvitteellisia asioita, tai päätellä kiroitusvihreestä huolimatta vaikkapa kirjeensaajan oikean nimen ja osoitteen. Tietokone pystyy tulkitsemaan pelkästään numeroita, ja niistäkin vain ykkösiä ja nollia. Tästä johtuen tietokoneen ns. tietojen käsittely on vain hyvin yksinkertaista laskentaa ja loogista päättelyä. Mutta kun se tekee sitä niin nopesti. Siinä on se juju. 1

Silta Ohjelmointikieli on ikään kuin silta ihmisen abstraktista ajattelusta tietokoneen konkreettiseen numeroiden maailmaan. Ihmisen (tietokonekielen) käsitteistä tosi, true ja epätosi, false, käänninohjelma luo tietokoneelle 1 ja 0. Niiden perusteella kone ikään kuin päättelee mitä tehdä, jatkaako lukujen käsittelyä seuraavasta ykkösnollajonosta vai hypätäkö ohjelmassa eteen/taaksepäin. 3.2. Sulautetun järjestelmän ohjelmointikielen tulee olla: Lähellä konetta Ohjelmointikielen tulee toimia 'lähellä konetta' siten, että CPU:n eri rekistereitä ja oheispiirejä (liitäntäpiirejä) voidaan manipuloida bittitasolla. Lähellä ohjelmoijaa Ohjelmointikielen tulee toimia 'lähellä ohjelmoijaa', eli ohjelmoijan kannalta sen tulee olla ikään kuin oikea ihmisen kommunikaatioonsa käyttämä kieli. Siis mielellään lähellä yleisesti puhuttua/kirjoitettua (englannin) kieltä. Kuva 3.1. Tietokoneohjelman hierarkiatasot. 2

Miksi sulautetut järjestelmät ohjelmoidaan C-kielellä? Pienissä systeemeissä käytetään pienitehoisia, yleensä 8-bittisiä mikro-ohjaimia, joissa on vähän muistia ja joiden päätehtävä on ohjata ja valvoa jonkun elektronisen laitteen toimintaa. Siksi käytettävissä olevan ohjelmointikielen tulee olla laiteläheistä. Valittavan ohjelmointikielen tulee olla yleinen eli paljon käytetty ja siksi myös normioitu, standardoitu. Suositulle kielelle löytyy tarvittaessa apua; so. koulutusta, kirjallisuutta, kursseja, työkaluja, valmiita ohjelmia, www-osoitteita, keskustelupalstoja netissä, jne. Mielellään sen tulee olla sellainen, että se on helppo oppia ja kuitenkin tehokas. Tärkeintä tietenkin on, että käytettävälle mikro-ohjaimelle löytyy valittavan kielen käänninohjelma ja muita työkaluja. C-kielen ominaisuuksia - se on tehokas, eli C-kääntäjä tekee tiivistä ja nopeaa koodia - se on siirrettävä, eli koodi toimii eri prosessoriympäristöissä (eri tietokoneissa). Siitä nimitys "kannettava assembly". - C-kääntimiä löytyy hyvin usealle prosessorille, sekä kaupallisia, että ilmaisia - lausekielinen, korkean tason yleisluonteinen kieli, joten se on helppo oppia - laiteläheinen, päästään operoimaan CPU:n ja oheispiirien rekistereitä bittitasolla. - se on käännettävä kieli. Kääntäminen tapahtuu käännin-ohjelmalla ennen ohjelman käyttöä. Kääntimien ongelma, tosin aika pieni, on se, että saman prosessorin eri C-kääntimet käyttävät kielen eri syntakseja, murteita, jolloin koodin vaihdettavuus vaatii toisinaan sovitustyötä. Silti ns. perus-c voi olla ja tuleekin olla, hyvinkin yhdenmukaista so. vaihtokelpoista. Ritchie&Kernighan kehittelivät uutta käyttöjärjestelmää ja loivat samalla C-kielen. 3

C on ns. rakenteinen ohjelmointikieli C-kieli sopii jäsentävään suunnitteluun eli rakenteiseen, strukturoituun ohjelmointiin. Ohjelma on helpompi kehittää kun monimutkaiset ongelmat jaetaan ensin pienempiin palasiin. Se mahdollistaa valmiiden, käytännössä testattujen funktioiden uusiokäytön. Esimerkkinä vaikka LCD-näytön ohjaus tai sarjaportin käsittely. Rakenteinen ohjelma on helpompi korjata, koska ohjelmavirheet, bugit, paikallistetaan tavallisesti yhteen funktioon. Virheitä ei tarvitse etsiä koko koodista. Ohjelmasta tulee samalla hierarkkinen, kun funktiot kutsuvat toisiaan. Joitain funktioita käytetään anturien lukemiseen, toista tulosten laskentaan, kolmatta toimilaitteen ohjaamiseen, jne. C:n sanotaan olevan laiteläheisen ohjelmoinnin kantaisän. Oikeastaan sulautetuissa systeemeissä, joissa yleensä on käytettävissä vähäiset laiteresurssit, ei muita korkean tason kieliä voi ajatellakaan. Sulautetut ja C-koodin siirrettävyys Jos hieman karrikoidaan, niin pienten mikro-ohjainten ohjelmointi on pääosin rekistereiden bittien manipulointia ja huomattavasti vähemmän yleisluontoista, oikeaa, tietojenkäsittelyä. Suurien, 16- ja 32-bittisten, mikro-ohjaimien yhteydessä voidaan hyödyntää valmiita kirjastoja, tehdä oikeaa ohjelmointia. Pikkuohjaimien I/O-pinnien kanssa työskentely on enemmälti käsityötä. Mutta juuri sehän niissä kiehtoo. Ainoastaan sellainen koodi, joka on kirjoitettu täysin ANSI C:n mukaisia kirjastoja käyttäen, on siirrettävissä sellaisenaan alustasta toiseen. Sulautetuissa järjestelmissä se ei ole mahdollista. Laiteläheisyys tuo niin paljon ohjelmakoodiin erikoisratkaisuja, että aina on suoritettava enemmän tai vähemmän tapauskohtaisia muutoksia. Jopa saman mikro-ohjaimen eri C-kääntimien kesken siirrettävyys on lähinnä mainoslause. Toki se on helpompaa saman, kuin eri mikro-ohjainperheiden kesken. 3.3. Sulautetut järjestelmät ja ANSI C C-kieli on hyvin standardisoitu. Standardointi mahdollistaa sen, että kieli on helposti siirrettävissä eri ympäristöihin (eri mikro-ohjaimille). Samalla se takaa, että käyttövarmuus, ylläpidettävyys ja suoritustehokkuus ovat hyvät. ANSI, American National Standards Institute, on vuodesta 1983 alkaen huolehtinut C-ohjelmien yhteensopivuudesta. Ennen sitä kaikki ohjelmoijat noudattivat normina Ritchie ja Kerninghan kirjaa The C Programming Language. ANSI C standardi valmistui 1989 ja sitä on myöhemmin (1999) täydennetty. Kun ohjelmassa käytetään pelkästään ANSI-standardin mukaista koodia, se on käännettävissä eri ympäristöihin ja kääntämisen voi tehdä kaikilla normin mukaisilla C- työkaluilla. ANSI C määrittää C-kielen lisäksi myös standardikirjaston (Standard Library), jossa määritetään ne perusfunktiot, jotka ovat käyttävissä eri ympäristöissä ja josta voi poimia useaan eri tilanteeseen ja ongelmaan sopivan ohjelmamoduulin. Valmiita funktioita löytyy mm. käyttöjärjestelmän käsittelyyn, muotoiltuun syötteeseen ja tulostukseen, muistin varaamiseen, merkkijonojen käsittelyyn jne. Normi esittää yksityiskohtaisesti kunkin valmiin funktion toiminnan. 4

Mitä lähempänä laitteistoa ollaan, sitä vähemmän voi käyttää yleiskäyttöisiä valmiita ratkaisuja. Standardinmukaista ANSI C:tä ei oikeastaan ole olemassa sulautetuille järjestelmille. Suurin osa sen kirjastoista on aivan liian raskasta 8-bittiselle mikro-ohjaimelle. Toisaalta laiteläheisyys edellyttää suuren määrän koodia, jota ei ole standardoitu. Mikä on C99? ISO 9899 on uusin standardi eli C99. - mitaltaan muuttuvat taulukot, koko voidaan määrittää ajonaikaisesti - // kommentit C++-kielestä - Boolean tyyppi, stdbool.h - helpommat muuttujamäärittelyt - uusia tietotyyppejä vaativaan laskentaan - funktiolla on oltava paluutyyppi, return type - inline-avainsana, pienet usein kutsuttavat funktiot voidaan kääntää konekieliseksi koodiksi ilman hyppykäskyjä tai pinon käsittelyä. Suoritus nopeutuu. Kaupalliset C-kääntimet ovat jäämässä pois tuotannosta, koska C++ tullut tilalle. Siksi gcc ja sen AVRversio avr-gcc valtaavat alaa. Lisätietoja C-standardien saatavuudesta: http://www.cs.tut.fi/~jkorpela/cinfo.html#std <http://www.cs.tut.fi/~jkorpela/cinfo.html> Standardi on kielen "lakikirja". Standardin tehtävänä on olla tiivis ja yksiselitteinen.. WinAVR-paketti sisältää oman kirjaston, jossa on useita standardikirjaston funktioita, mm. merkkijonon käsittelyyn sstrcpy, strlen, matematiikkafunktioita kuten sin, cos, sqrt, pow, i-o-funktioita kuten printf ja scanf. Kaikkia ei voi, eikä kannata konfiguroida, koska ne ovat esim. liian suuria. Toisaalta siinä on paljon AVR-spesifisiä funktioita. Perimmäisenä pyrkimyksenä kuitenkin standardin noudattaminen. Sulautettujen järjestelmien koodikirjastoon kukin kääntimen valmistaja joutuu tekemään suuren joukon kyseisen prosessorin (mikro-ohjaimen) läheisiä, standardiin kuulumattomia funktioita. Näiden funktioiden määrä ja laatu ovat hyvin ratkaisevia tekijöitä, kun sopivaa käännin-ohjelmaa valitaan. Myös yksityinen ohjelmoija voi kirjoittaa omia - tai käyttää muiden valmistamia funktioita, jos oma järjestelmä edellyttää erityistarpeita. Hyvin tehty oma funktio on yleiskäyttöinen ja antaa lisämukavuuksia koodaamiseen. 5

GCC, GNU C Compiler GCC tarkoittaa nykyään GNU Compiler Collection, koska sillä voi kääntää C:n lisäksi myös C++, Java, Fortran, Ada, kieliä ja se tukee mm. Alpha, Intel x86, Motorola 68k, MIPS, PowerPC, ARM, AVR, Motorola HC11/12 ohjaimia. Ristikäännin Sulautettujen laitteiden ohjelmia kehitetään muussa kuin kohdeympäristössä (PC), jolloin tarvitaan ristikäännin. Ristikäännin toimii siis PC-koneessa (Pentium, AMD), mutta koodi käännetään kohdeprosessorin konekoodiksi (esim. AVR). Koska ANSI-C ei suoraan tue rekisterien käyttöä esim. symbolisen konekielen tavoin (LDI r16,8) siksi laiteläheisessä ohjelmoinnissa tarvitaan erityisen paljon rekistereiden manipulointia makrojen tai erikoiskirjastofunktioiden avulla. Miksi C eikä asm? Assembly eli lyhyesti asm, on matalan tason ohjelmointikieli ja se on aina laitteeseen (mikro-ohjain) sidottu. Oikeasti assembly on konekoodia, jonka konekielen käskyt on muutettu apusanoiksi eli muistikkaiksi, mnemonics, jotta ne olisivat koodaajan helpommin hallittavissa. Koska asm on laiteläheinen, sen koodi on suoraan cpu:n komentamiseen tarkoitettuja yksinkertaisia käskyjä, ja niitä oltava paljon. Se vaatii ohjelmoijalta kohtuutonta ja turhaa muistamista. Ohjelman tekeminen asmilla on todella suuritöistä. Tämänpäivän 8-bittiset ohjaimet ovat tehokkuudeltaan aivan toista kuin vuosikymmen sitten, joten ne antavat mahdollisuuden tehdä monipuolisia sovelluksia, niin laite- kuin ohjelmatasollakin. Jotta työ olisi muutakin kuin puuhastelua, ammattimaisuus edellyttää koodausta korkeamman tason kielellä. Muistathan, että korkean tason kielenä yksi C-käsky käännettynä käsittää (joskus hyvinkin) monta asmkäskyä. Kun ohjelmoidaan C-kielellä, tai jollain muulla korkean tason kielellä, CPU:n sisäinen toiminta ja rekisterit voidaan ainakin osittain unohtaa. C-käännin hoitakoon sen. Opiskeluvaiheessa MCU:n sisäisen rakenteen ja toiminnan haltuunotto on tärkeää, sillä sitä tietämystä tarvitaan jatkuvasti uusien asioiden omaksumiseen. Mutta kun ne hallitaan, ts. ammattisanasto ja työkalut hallitaan, voidaan keskittyä ongelman ratkaisuun eli sovellusohjelman koodaamiseen. Toinen tärkeä ominaisuus on siirrettävyys, portability. Jos jostain syystä on vaihdettava MCU toiseen, C-koodin siirtäminen siihen on huomattavasti kevyempi toimenpide kuin kaiken koodaaminen uudelleen asmilla. Porttaamisessa auttaa, jos on mahdollista toteuttaa koodia mahdollisimman paljon C-kielen standardikirjasto-funktioilla, sillä ne soveltuvat sellaisenaan käyttöön uudessakin ympäristössä. 6

Ja mikä lienee tärkeintä; korkean tason kielessä voit keskittyä oikeaan ohjelmointiin eli algoritmien suunnitteluun. Vaikka toisaalta; rekisterien ja niiden bittien manipuloinnista ei laiteläheisessä sulautettujen systeemien ohjelmoinnissa koskaan päästä eroon. Onneksi. Molempi parempi Assemblyä käytetään C-kielen sisällä kun kyseessä on koodin aikakriittiset osiot (nopeus, synkronointi). Siksi koodaajan tulee osata ainakin käyttämänsä mikro-ohjaimen assembly-koodin perusteet. Netistä lainattua: Nyky-C:n sijasta voisi ehkä harkita C++:n käyttöä sulautetuissa järjestelmissä, sillä C++:ssä voi käyttää korkeampaa abstraktio-tasoa. C++:lla voi tehdä tehokkuudeltaan C:n veroista koodia ja oikeastaan C++ toteuttaa paremmin C-mäisyyden lähtökohdat kuin nyky-c. Special note: The C language does not define any mechanism for using different address spaces. As a result, each compiler has defined it's own mechanism for dealing with this aspect of Harvard architecture for the AVR. C, by default, assumes everything exists in the same address space. C-kieli olettaa, että ohjelmakoodi ja data sijaitsevat samassa muistiavaruudessa. Miten korkean tason kielestä konekoodia? Assembler on ohjelma, joka kääntää symbolisesta konekielestä (assembly) konekoodia ennen ohjelman ajoa. Tulkki, Interpreter on ohjelma, joka tulkitsee ohjelman käskyjä rivi kerrallaan ohjelman ajon aikana. Tästä seuraa, että ohjelman ajo on hidasta. Hyvä tulkkiohjelma on iso ja monimutkainen, joten se tarvitsee paljon muistia. Käyttö on hankalaa, ensin ladataan tulkki, sitten vasta varsinainen ohjelma. Käännin, Compiler on ohjelma, jonka avulla lähdekoodi käännetään ennen ohjelman ajoa toimivaksi ajokelpoiseksi koodiksi. Se on nopea, koska CPU osaa ajaa suoraan käännettyä koodia. Käänninohjelma on iso ja monimutkainen, mutta sitä ei tarvita enää ohjelman ajon aikana. Itse ohjelma ei tarvitse paljon muistia. 7