Laiteläheinen C-kieli, yleistä

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

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

Tietokoneohjelman anatomia Mikä on tietokoneohjelma ja tietokonekieli

4. Lausekielinen ohjelmointi 4.1

Luento 1 Tietokonejärjestelmän rakenne

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

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

4. Lausekielinen ohjelmointi 4.1

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

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

Laiteläheinen C-kieli osa 1 pva

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

BL40A1810 Mikroprosessorit, harjoitus 1

2.2. Tietokoneohjelman tekeminen pva, kuvat jma

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

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

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

KYMENLAAKSON AMMATTIKORKEAKOULU

Laiteläheinen C-kieli, hello.c

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

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

Ohjelmoinnin perusteet Y Python

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

Mikro-ohjain µc harjoitukset - yleisohje

Koodaamme uutta todellisuutta FM Maarit Savolainen

NetBeans asennus ja etäkäyttö C-kielen opiskeluun, Windows

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

Johdanto laiteläheiseen C-ohjelmointiin

NetBeans asennus ja etäkäyttö C-kielen opiskeluun, Linux

Ohjelmointi 1. Kumppanit

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

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

1. NetBeans-ohjelman asennus ja käyttöönotto pva

2. Sulautettu järjestelmä ja mikro-ohjain , pva

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

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

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

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

1. Olio-ohjelmointi 1.1

Ohjelmoinnin perusteet, syksy 2006

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

1. Ohjelmoinnin peruskäsitteet ja -elementit

Johdatus ohjelmointiin

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

Opastusta ohjelmointiin, C-kieleen ja mikro-ohjaimiin. Se kaikki se tulee tässä kirjassa.

Ohjelmoinnin perusteet Y Python

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

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

Test-Driven Development

Test-Driven Development

Algoritmit. Ohjelman tekemisen hahmottamisessa käytetään

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

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

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

CUDA. Moniydinohjelmointi Mikko Honkonen

Algoritmit 1. Luento 3 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

Harjoitus 2 (viikko 45)

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Kemian tekniikan kandidaattiohjelman ohjelmointikurssi (5 op)

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

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

Ohjelmoinnin perusteet Y Python

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

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

Ohjelmoinnin perusteet Y Python

13/20: Kierrätys kannattaa koodaamisessakin

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

C++ Ohjelmoijan käsikirja. Johdanto

Ryhmäharjoitus III: Mitä on koodaaminen? A. TIEY4 Tietotekniikkataidot, kevät 2017 Tehdään ryhmäharjoitustunnilla 20.3.

Ohjelmoinnin perusteet Y Python

Common Language Runtime

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta Toteuta Pythonilla seuraava ohjelma:

TAMPEREEN TEKNILLINEN YLIOPISTO

Tutoriaaliläsnäoloista

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

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Tietokanta (database)

Python-ohjelmointi Harjoitus 2

Kieliversiointityökalu Java-ohjelmistoon. Ohje

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


SISÄLLYS sisällys 1 Tietokoneen toimintaperiaate ja käyttö 2 Tietokoneen historia 3 Tietokoneen rakenteen ja toiminnan perusteet

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

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

C-ohjelmointikielen perusteet, osa 1

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

Harjoitus 5 (viikko 48)

Transkriptio:

Laiteläheinen C-kieli, yleistä PUNOMO NETWORKS OY 23.8.2016 pva Johdanto Mikroprosessori, CPU, Central Prosessing Unit on komponentti, jonka toiminta on ohjattavissa muistiin tallennetuilla käskyillä. Käskyt peräjälkeen toteutettuina muodostavat tietokoneohjelman. CPU voi käskyjen mukaan: - siirrellä tietoa - suorittaa yksinkertaista aritmetiikka ja loogisia operaatioita - tehdä päätöksiä (if-else) CPU ymmärtää vain juuri sille suunniteltua konekieltä, oikeastaan vain ykkösiä ja nollia. Ihmiselle taas luonnollinen, puhuttu ja kirjoitettu, kieli on paras kommunikointiväline. Miten nuo saadaan kohtaamaan? Tietokone ei tiedä yhtään mitään, se osaa vain laskea. Ja kun se ei tunne muita numeroita kuin ykkösen ja nollan, sen laskentataitokin on aika suppea. Pelkkää hyvin yksinkertaista aritmetiikkaa ja loogista päättelyä. Mutta kun se tekee sitä niin nopeasti, miljoonia laskuja sekunnissa. Siinä on se juju. Miten korkean tason kielestä konekoodia? Assembler on ohjelma, joka kääntää symbolisesta konekielestä (assembly) konekoodia ennen ohjelman ajoa. Tulkki, Interpreter on ohjelma, joka tulkitsee ihmisläheisen 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. Python on poikkeus. Kääntäjä, Compiler on ohjelma, jonka avulla lähdekoodi käännetään ennen ohjelman ajoa toimivaksi ajokelpoiseksi koodiksi. Koodista tulee nopeaa, koska CPU osaa ajaa suoraan käännettyä koodia. Kääntäjäohjelma on iso ja monimutkainen, mutta sitä ei tarvita enää ohjelman ajon aikana. Itse ohjelma ei tarvitse ajon aikana paljon muistia. C- ja C++ toimivat näin. 1

Mikä on ohjelmointikieli? Ohjelmointikieli on ikään kuin silta ihmisen abstraktista ajattelusta tietokoneen konkreettiseen numeroiden maailmaan. Ihmisen (tietokonekielen) käsitteistä tosi, true ja epätosi, false, kääntäjäohjelma 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. Ohjelmointikielen määritykseen on monta tapaa; 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. Ohjelmointikieli on väline, jolla ihminen kertoo tietokoneelle mitä se tulee tehdä. Ihmisen käsitteistä tosi ja epätosi eli true ja false, kääntäjäohjelma luo tietokoneelle ykkösen ja nollan eli 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. Laiteläheisen 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ä. 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ääntäjiä 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ääntäjä-ohjelmalla ennen ohjelman käyttöä. 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 Raspin GPIO-pinnien käsittely. Rakenteinen ohjelma on helpompi korjata, koska ohjelmavirheet, bugit, paikallistetaan tavallisesti yhteen funktioon. Virheitä ei tarvitse etsiä koko koodista. Ohjelmasta tulee samalla hier'arkkinen, kun funktiot kutsuvat toisiaan. Joitain funktioita käytetään anturien lukemiseen, toista tulosten laskentaan, kolmatta toimilaitteen ohjaamiseen, jne. 2

Miksi sulautetut järjestelmät ohjelmoidaan C-kielellä? Pienissä systeemeissä käytetään pienitehoisia 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ääntäjäohjelma ja muita työkaluja. Myös tulevaisuudessa. 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, 32/64-bittisten mikro-ohjaimien ja Linux-käyttöjärjestelmän yhteydessä voidaan hyödyntää valmiita kirjastoja, tehdä oikeaa ohjelmointia. 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 aina ole mahdollista. Laiteläheisyys tuo niin paljon ohjelmakoodiin erikoisratkaisuja, että aina on suoritettava enemmän tai vähemmän tapauskohtaisia muutoksia. 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, 2011) 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. 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. Mikä on C99? Mikä on C11? Vuonna 2007 aloitettiin uuden standardi-version kehittely, se valmistui 2011. Siinä laajennettiin C- kielen ominaisuuksia ja kirjastoja. GCC, GNU C Compiler GCC tarkoittaa nykyään GNU Compiler Collection, koska sillä voi kääntää C:n lisäksi myös C++, Objective C, Objective-C++, Java, Fortran, Ada, kieliä ja se tukee mm. Alpha, Intel i386, x86_64, Motorola 68k, MIPS, PowerPC, ARM, AVR, Motorola HC11/12 ohjaimia. http://gcc.gnu.org/ GCC on tärkeä osa GNU/Linux-projektia. Koska se on osoittautunut luotettavaksi työkaluksi, se on laajalti käytössä myös yritysmaailmassa ja sitä kehitetään aktiivisesti myös huomenna. 3

Miksi C eikä asm? Assembly eli lyhyesti asm, on matalan tason ohjelmointikieli ja se on aina mikro-ohjaimeen 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ä. 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 asm-käskyä. Kun ohjelmoidaan C-kielellä, tai jollain muulla korkean tason kielellä, CPU:n sisäinen toiminta ja rekisterit voidaan ainakin osittain unohtaa. C-kääntäjä 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, porttaaminen. Jos jostain syystä on vaihdettava mikro-ohjain 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ä. 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. Ristikääntäjä Sulautettujen laitteiden ohjelmia (Internet of Things) kehitetään muussa kuin kohdeympäristössä (PC), jolloin tarvitaan ristikääntäjä. Ristikääntäjä toimii siis PC-koneessa (Pentium, AMD), mutta koodi käännetään kohdeprosessorin konekoodiksi (esim. ARM). Alla olevasta kuvasta käy ilmi C-kielen kehitys vuosien saatossa. C- ja C++ kielet ovat säilyttäneet asemansa laiteläheisen koodin kirjoittamisessa. Java yritti voittaa 4

niiden paikan, yliopistomaailma teki parhaansa, kuitenkaan siinä onnistumatta. Android-puhelimiin ohjelmia tekevät sitä käyttävät. Microsoft kehitti oman ceen, C sharpin, C#. GNU/Linuxilla ei perinteisesti ole käytetty juurikaan C++:aa, vaan nimenomaan C:tä, joka on osittain erilainen kieli. C:n kanssa käytetään POSIX-API:a, jolloin ohjelmat toimivat aikalailla suoraan myös muilla unixeilla. Työkaluketjusta, binutils ja kirjastoista, libraries, infoa omissa dokumenteissa. 5