5.2. Sulautetun järjestelmän C-kielen perusteet 2/8, käsitteet pva

Koko: px
Aloita esitys sivulta:

Download "5.2. Sulautetun järjestelmän C-kielen perusteet 2/8, käsitteet 7.1.2008 pva"

Transkriptio

1 5.2. Sulautetun järjestelmän C-kielen perusteet 2/8, käsitteet pva Hän joka ei ota riskejä, ei myöskään juo shampanjaa. - venäläinen sanalasku Tässä osiossa tärkeää: lisää ohjelmoinnissa tarvittavia peruskäsitteitä, kuten - muuttujat - tietotyypit - perusoperaattorit Sisältö Muuttuja, variable Ohjeita muuttujan nimeämiseen: Miksi muuttuja pitää esitellä? Tieto- eli datatyypit C-kielessä on neljä perustietotyyppiä: Muuttujan tyypin valinta User types Talletusluokat eli muistimääritteet Talletusluokka automaattinen, automatic Talletusluokka Static Talletusluokka Extern Rekisterimuuttujat, Register Variables Volatile Yleinen eli globaali muuttuja, Global Variable Tilde Vakio, constant Miksi käytetään vakioita? 1. Numeeriset vakiot 2. Merkkivakiot 3. Symboliset vakiot 4. Varattu sana const Operaattorit, operators Sijoitusoperaattorit Sijoitus- ja matemaattisten operaattoreiden yhdistäminen Matemaattisten operaattoreiden käyttö-harjoitus Vertailuoperaattorit Unaarioperaattori Lisäys- ja vähennysoperaattorit Varatut sanat 1

2 Yleistä Tämä luku on hyvin laaja ja perusteellinen. Se sisältää kaiken olennaisen ja käytännössä tarvittavan perustiedon. Eli eräänlaiset C-kielen aakkoset, joiden avulla myöhempi työskentely tapahtuu. Käytä aikaa asioiden omaksumiseen ja harjoitteluun jotta saat tartuntapintaa varsinaisia laiteläheisen ohjelmoinnin opintoja varten. Siispä töihin. Luo uusi projekti, nimi eka_2.c. Kirjoita seuraava koodi. eka_2.c, esimerkkikoodi /********************************************************** Project : eka_2.c Hardware: PV-M32 + PV-LEDIT on PORTB Software: WinAVR Date : Author : pva Comments: ensimmäiset opetuskoodit **********************************************************/ #include <avr/io.h> #include <util/delay.h> // prototyyppi void wait(uint16_t time); int main(void) { DDRB = 0xFF; // B-portin suunta ulos unsigned char kuvio = 0x55; // kuvio bitteinä while(1) // ikuinen silmukka { // silmukan alku PORTB = 0xF0; // B-porttiin wait(500); // kulutetaan aikaa PORTB = kuvio; wait(500); // B-porttiin kuvio-muuttujan arvo PORTB = 0x0F; // B-porttiin wait(500); } // silmukan loppu } // main-funktion loppu // *** Primitive wait() *** void wait(uint16_t time) { volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); } Käännä ja ohjelmoi AVR. Jatketaan analysointia. Uutta on siis vain rivi: 2

3 unsigned char kuvio = 0x55; // kuvio bitteinä Mikä on unsigned char kuvio? Se on Muuttuja, variable Tietokone tekee monenlaisia asioita ohjelman ohjaamana; esim. se lukee lämpötilaanturin arvoja, muuttaa (laskemalla) sen arvon Celsius-asteiksi, vertaa sitä ennalta annettuun raja-arvoon ja jos arvo ylittää sen, kytkee transistorikytkimen kautta tuulettimen moottorin pyörimään. Näiden tehtävien suorittamiseen mikro-ohjain tarvitsee ohjelmakoodin lisäksi tietoa, dataa eli numeroita ja merkkejä. Osa tiedosta on asetettu pysymään muuttumattomana ohjelman ajon ajan. Ne ovat vakioita, esim. raja-arvo, josta tuuletin käynnistetään. Toiset tiedot muuttuvat ja niitä on voitava muuttaa milloin tahansa ohjelman aikana. Luetaan vaikkapa lämpötilatieto kerran minuutissa. Muutettavat tiedot tallennetaan muuttujiin. Muuttujan arvo muuttuu, tai saattaa muuttua, ohjelman ajon aikana. Vakion arvo ei muutu ohjelman aikana. Muuttujat ovat olennaisia asioita kaikissa ohjelmointikielissä. Käsiteltävälle tiedolle pitää olla jokin varastopaikka, oli se sitten vakio tai muuttuja. Muuttujat ovat tiedon tallennukseen varattuja käyttömuistin (SRAM) lokeroita, joihin voi tallettaa ohjelmassa tarvittavia lukuarvoja, numeroita, merkkejä jne. Jokaisella muuttujalla on oma nimi ja tyyppi. Jotta C-käännin tietäisi miten muuttujaa käytetään, se on ensin esiteltävä. Esittely tapahtuu ilmoittamalla funktion alussa muuttujan tyyppi ja muuttujan nimi. Esittely varaa tilaa muuttujalle RAM-muistista ja yhdistää nimen varattuun tilaan. Muistipaikan koko määräytyy tyypin perusteella. Muuttuja on RAM-muistiin nimetty muistipaikka, jonne voi tallentaa luvun tai merkin. Oikeasti muistipaikassa on vain ykkösiä (sähkövaraus) ja/tai nollia (ei varausta). Muuttujalla tulee olla - nimi, jolla muuttuja tunnistetaan - tyyppi, joka määrää kuinka suuri muistialue varataan, millaista tietoa sinne voidaan tallettaa ja mitä toimenpiteitä, operaatioita, voidaan muuttujaan kohdistaa - arvo, joka on muistipaikan sisältö, annetaan heti tai myöhemmin. Muuttujan alkuarvo kannattaa antaa heti määrittelyn yhteydessä. Jos et muuta keksi, anna vaikka nolla. Muuttujan määrittelyn formaatti: 3

4 muuttujan_tyyppi muuttujan_nimi; int x = 0; char merkki = 0; float lampo; Määrittelyrivi päätetään puolipisteellä (;) Ohjeita muuttujan nimeämiseen: Nimen kelvolliset merkit ovat a - z, numerot ja alaviivat. Et saa käyttää öökkösiä, eli skandinaavisia ä, ö eikä å. Ensimmäinen merkki ei saa olla numero, eikä myöskään alaviiva (sillä se on varattu järjestelmän käyttöön). C-kieli ymmärtää isot ja pienet kirjaimet eri merkeiksi. Ole niissä tarkkana. Käytä muuttujien nimissä vain pieniä kirjaimia. Myöhemmin esiteltävät varatut sanat eivät voi olla muuttujan nimiä. Kokonaislukumuuttujan määrittelyssä kirjoitetaan varattu sana int (integer) ja sitten muuttujan nimi. Voit esitellä useita samaa tyyppiä olevia muuttujia samalla rivillä erottamalla ne toisistaan pilkulla. int virta_1, virta_2, jannite; Muuttujan nimenä kannattaa käyttää jotain sen merkitystä tai tehtävää kuvaavaa nimeä. Jos esim. muuttujaan tallennetaan virta-arvoja, kannattaa antaa muuttujalle nimi virta. Vältä käyttämästä muuttujan nimenä pelkkää kirjainta. Koska globaalin (yleisen) muuttujan nimen tulee olla erityisen kuvaava, (se näkyy kaikille funktioille ja siten käytetään monessa paikassa) se voi toisinaan muodostua kahdesta tai useammasta sanasta. Käytä silloin sanojen välissä alaviivaa, esimerkiksi näin: char ovi_kytkin; int lampo_anturi; Lokaalille eli paikalliselle muuttujalle, joka on vain väliaikainen, käy lyhyempikin nimi. i ja j sallitaan silmukoissa, p ja q osoittimissa ja s ja t merkkijonoissa, koska ne ovat niin vakiintuneita käytäntöjä. Hyvin valittu nimi on kuin ylimääräinen kommenttirivi, se kertoo heti lukijalle mistä on kysymys, mitä ko. ohjelmakohteessa tapahtuu. Miksi muuttuja pitää esitellä? Aina kun kirjoitetaan ohjelmakoodia tarvitaan muuttujia. Käännin tarkistaa joka kerta muuttujan kohdatessaan, onko muuttuja esitelty. Täten säilyy oikea kirjoitusmuoto. Jos näin ei tehtäisi, käännin loisi aina uuden muuttujan virheellisenkin nimen yhteydessä. Tästä seuraisi ongelmia. Isoista ohjelmista ohjelmointivirheiden etsiminen on tosi työlästä. 4

5 Huom! Muuttujalle varataan tilaa SRAM-muistista, koska sen arvoa on voitava muuttaa ohjelman kuluessa. SRAM-muisti on rakennettu kiikuista, joilla on sähkön kytkemisen jälkeen satunnainen arvo, siis yksi tai nolla. Kiikku voi olla kiikun tai kaakun. Muuttujan esittely varaa vain muistista tilaa, mutta ei ota kantaa muistin sisältöön. Siksi muuttuja on alustettava, initialisoitava eli sille on annettava arvo. Alustamattoman muuttujan käyttö on vaarallista, koska muistipaikka saattaa sisältää mitä tahansa satunnaista dataa. Miksi tarvitaan muuttujaa? Käytä ennalta määriteltyjä vakioita, ei lukuja - sillä ne ovat helpommin muutettavissa esim. #define JANNITE 9 Sulautetun järjestelmän työmuistin (SRAM) koko on yleensä vaatimaton, joten kääntimen tulee tietää: - kuinka iso muistipaikka datalle varataan, varataan vain minimitarve - ja mitä toimenpiteitä ko. datalle voidaan tehdä Tieto- eli datatyypit C-kieli on 'tyypitetty kieli'. Se tarkoittaa sitä, että kaikilla muuttujilla ja funktioilla on oltava jokin tyyppi. Muuttujan tyyppi määrää, millaisia arvoja muuttuja voi saada ja millaisia operaatioita muuttujaan voidaan kohdistaa, sekä paljonko muistia muuttuja tarvitsee. C-kielessä on neljä perustietotyyppiä: char, character, merkkityyppi, esim. 'a', 'B'. Teknisesti char on 8-bittinen kokonaislukutyyppi, joten sulautetuissa järjestelmissä on tyypillistä käyttää 8-bittisiä heksalukuja tässä yhteydessä, esim. 0xF0. Muuttuja sisältää numeroita, siis vain ykkösiä ja nollia, ei kirjaimia, ne vain tulkitaan sopivassa yhteydessä kirjaimiksi. int, integer, 16-bittinen kokonaislukutyyppi esim. 6, -49, float, floating point, 32-bittinen reaali- eli liuku- eli desimaalilukutyyppi, esim. 2.46, 3.12E3, Kun liukuluku tallennetaan muistiin, se jaetaan kahteen osaan, toiseen osaan tallennetaan mantissa ja toiseen eksponentti. Tilaa varataan tietylle määrälle numeroita. Eksponentti ja mantissa voidaan tallettaa muuttujaan eri tavoilla. ANSI-normi ei määrää miten, joten kääntimet tekevät sen omalla tavallaan. 5

6 Pienissä mikro-ohjaimissa ei ole laitteistotukea liukuluvuille (laskentayksikköä, saati matematiikkaprosessoria), joten laskenta on tehtävä ohjelmallisesti. Ongelmaksi tulee silloin suuri muistintarve. Onneksi suurille liukuluvuille on harvoin tarvetta pienissä sulautetuissa järjestelmissä. Liukulukutyypin käytön etuna on se, että sillä voidaan esittää paljon suurempi määrä lukuja, kuin kokonaislukutyypillä. Haittana taas se, että liukulukuoperaatiot ovat paljon hitaampia kuin kokonaislukulaskenta ja pikku systeemeissä laskettaessa luvun tarkkuus vähenee. double, double precision, pidempi desimaaliluku, liukulukumuuttuja, jossa kaksinkertainen tarkkuus. Näitä perustyyppejä voi täsmentää etuliitteellä: unsigned int, etumerkitön (positiivinen) kokonaislukumuuttuja unsigned char, etumerkitön merkkimuuttuja Kokonaisluvut ovat oletuksena etumerkillisiä, ne voivat olla siis joko positiivisia tai negatiivisia. Yleisin tapa esittää negatiivinen numero on kahden komplementti, two's complement. Unsigned on etumerkitön, siis vain positiivisia lukuja sisältävä muuttujatyyppi. Käytä unsigned-tyyppiä, aina jos suinkin voit. Negatiivisten lukujen käsittelyyn liittyy etumerkin testaus ja siihen tarvitaan koodia ja muistitilaa ja siten myös aikaa. Etumerkki varaa yhden bitin paikan rekisteristä, joten lukualue jää pienemmäksi. (void merkitsee tyhjä, ilman tyyppiä) Nimi Koko Lukualue Kommentti Bit 1 bitti 0 tai 1 yksittäinen bitti char 8 bittiä merkki tai etumerkillinen kokonaisluku unsigned char 8 bittiä merkki tai etumerkitön kokonaisluku int 16 bittiä etumerkillinen kokonaisluku short int 16 bittiä etumerkillinen kokonaisluku signed int 16 bittiä etumerkillinen kokonaisluku unsigned int 16 bittiä etumerkitön kokonaisluku long int 32 bittiä etumerkillinen kokonaisluku unsigned long 32 bittiä etumerkitön kokonaisluku int signed long 32 bittiä etumerkillinen kokonaisluku int float 32 bittiä +/-1.175e-38 +/-3.402e38 double 32 +/-1.175e-38 +/-3.402e38 Taulukko C-kielen tietotyypit. Siinä on esitelty C-kielen tavallisimmat tietotyypit, niiden muistista varaama tila ja lukualue. 6

7 Ei ole järkevää käyttää liukulukuja AVR:n yhteydessä, koska AVR-ytimessä ei ole liukulukulaskentaa suorittavaa rautaa. Liukuluvut on käsiteltävä ohjelmallisesti ja se syö valtavasti resursseja. avr-gcc:n kanssa ei voi käyttää double-tarkkuuden muuttujia. Parasta mitä voi tehdä on käyttää 32-bittisiä single precision liukulukuja float. Huom. Muuttujien koot vaihtelevat kääntimittäin ja varsinkin sulautettujen järjestelmien C- kääntimet eivät välttämättä sisällä kaikki niitä tietotyyppejä, mitä ANSI-normi edellyttää. Käytä näitä: ANSI C99 määrittelee muuttujien koot, esim. int16_t, int8_t, uint8_t, jne. Numeroarvo kertoo muuttujan koon, bittimäärän. C99 tietotyyppejä kannattaa käyttää porttaamisen (koodin siirto toiseen käännin- tai MCU-ympäristöön) helpottamiseksi. Siis silloin, jos tietotyypin koolla on merkitystä ohjelman toimintaan. int8_t int16_t int32_t int64_t (signed char) (signed int) (signed long int) (signed long long int) Vastaavasti etumerkittömät muuttujat: uint8_t (unsigned char) uint16_t (unsigned int) uint32_t (unsigned long int) uint64_t (unsigned long long int) esim. typedef signed char int8_t; se ja muut määritykset löytyvät stdint.h-headerista ja polku on C:\WinAVR \avr\include Mitä tarkoittaa UL numeron perässä? esim UL. Se on Unsigned long. Merkintä ei ole case sensitive, joten voit käyttää u tai U ja l tai L. C-kielen boolean-muuttuja varaa yhden tavun. Se on joko 0 (== false), or non-zero (== true). Voit käyttää Boolean-muuttujaa lippuna, flag, se selviää myöhemmin. 7

8 Muuttujan tyypin valinta Oikean datatyypin valinta on tärkeää (säästyy muistia ja koodi nopeutuu). 8-bittisissä sulautetuissa järjestelmissä manipuloimme tavallisimmin 8-bittisiä rekistereitä, tai I/O-liitäntöinä ulkoiseen maailmaan toimivia portteja. Silloin luonnollinen valinta on 8-bittinen tyyppi eli char. Valitse etumerkitön char, koska todennäköisemmin käytämme positiivisia lukuja ja voimme käsitellä suurempia lukuja (2 potenssiin 8 = 256) ja etumerkin testi jää pois. Jos tarvitaan suurempia lukuja kuin 255, niin silloin luonnollinen valinta on int ja taas etumerkitön, ellei toisin tarvita. Palataan koodiin. unsigned char kuvio; kuvio = 0x55; Määritimme siis funktion alussa kuvio-nimisen muuttujan, jonka tyyppi on unsigned char eli etumerkitön merkkimuuttuja. Seuraavalla rivillä sijoitamme kuvio-muuttujaan heksa-luvun 0x55. Muistanet, että = -merkki on C-kielessä sijoitusoperaattori. PORTB = kuvio; // B-porttiin sijoitetaan kuvio-muuttujan arvo Seuraavaksi B-porttiin sijoitetaan kuvio-muuttujan sisältö eli siis 0x55. Se on binäärisenä , joten joka toinen LED loistaa ja joka toinen ei. Viive kuten ennenkin, jotta ehdimme nähdä mitä tapahtuu. Käännä tämä koodi, samalla nimellä ja ohjelmoi mikro-ohjain saman tien. Nyt kuvioita on kaksi erilaista, tai oikeastaan kolme, jos pimeät lasketaan. TIETOTYYPIT Yksinkertaiset määrittelyt perustyypit - char, unsigned char, void, int, float, double Yksinkertaiset käyttäjän määrittämät tyypit - typedef, enum Rakenteiset, perustyypeistä johdetut - taulukko-vector, - tietue-structure, - yhdiste-union, - osoitin-pointer, - tiedosto, typedef struct, Vinkki: Miten kokonaislukumuuttujasta liukulukumuuttuja? int i; double d; d = i; parempi tapa: d = (double)i; 8

9 Käyttäjän itse määrittämät tyypit C-kielessä koodaaja voi luoda omia tyyppejä. Se tehdään typedef-määreellä ja apuna käytetään kirjaston standardityyppejä. Formaatti on: typedef standardi_tyyppi omatekema_tyyppi; typedef unsigned char tavu; // luo tavu-tyypin, etumerkitön char typedef unsigned int sana; // luo sana-tyypin, etumerkitön int Näistä myöhemmin lisää. Talletusluokat eli muistimääritteet Talletusluokalla määritetään mitkä funktiot pääsevät käsittelemään muuttujaa. Puhutaan ns. vaikutusalueesta. Toiseksi talletusluokka määrää, miten kauan muuttuja pysyy muistissa. Talletusluokat määräytyvät sen perusteella, missä muuttuja määritellään ja mitä avainsanaa käytetään. Talletusluokka automaattinen, automatic Kaikki funktion sisällä esitellyt muuttujat, paikalliset muuttujat, kuten myös funktion parametrit kuuluvat oletusarvoisesti auto-luokkaan, ellei ole toisin esitelty. Automaattiset muuttujat ovat voimassa vain siinä funktiossa, missä se on määritelty. Automaattinen muuttuja syntyy automaattisesti aina kun funktiota kutsutaan ja kun funktiosta poistutaan, se myös automaattisesti häviää. SRAM-muistipaikka voidaan ottaa muuhun käyttöön. Teknisesti ajatellen; järjestelmä varaa auto-tyyppiselle muuttujalle tilaa ajonaikaisesta pinosta, run time stack, silloin, kun funktion suoritus alkaa ja vapauttaa niiden tilanvarauksen, kun funktion suoritus loppuu. Tässä on nyt fundeeraamisen paikka! Asiaan vihkiytymätön ihmettelee usein, miten mikro-ohjaimessa voi olla vain 128 tavua SRAM-muistia, siis työmuistia? (Joissakin ohjaimissa ei ole laisinkaan RAMmuistia). Edellisen perusteella ymmärrät, miksi sulautetun järjestelmän ohjelma tulee jakaa pieniin funktioihin ja käyttää vain paikallisia muuttujia. Funktio muuttujineen elää vain oman aikansa ja kuolee pois. Sitten uusi funktio omine muuttujineen elää samassa muistitilassa ja käyttää samaa pinomuistia. Teemme samalla, hyvin pienellä, pöydällä kaikki työt. Jos entiset työvälineet poistetaan aina uuden työn tullessa ja uusitaan vain työkalut, ei tarvita isoa pöytätilaa. Auto-muuttujalla on määrittämätön ( mitä sattuu ) alkuarvo. Siksi se on aina ensiksi alustettava, eli sille on annettava jokin arvo. Jos hieman saivarrellaan, niin oikeasti muuttujat pitäisi esitellä näin: auto int luku; Mutta kun kaikki muuttujat ovat oletusarvoisesti automaattisia, niin tyyppi auto voidaan jättää pois. 9

10 Talletusluokka Static Jo haluamme käyttää funktion laskemaa muuttujan arvoa seuraavan kerran funktioon tullessamme, on meidän tehtävä muuttujasta pysyvä. Se tapahtuu lisäämällä avainsana, varattu sana, static, muuttujan tietotyypin eteen: static unsigned char kuvio; static uint8_t alku = 0x01; Static-määrityksellä kuvattu muuttuja alustetaan kerran (ensimmäisellä käyttökerralla) ja se varaa SRAM-muistia pysyvästi eli tuhlaa muistia). Ellei sitä tehdä, käännin alustaa muuttujan nollalla. Uudelleen alustamista ei seuraavalla käyttökerralla tehdä, kuten tapahtuu muilla automaattisilla muuttujilla. Static-muuttuja säilyttää arvonsa funktion kutsukertojen välillä. Tämä on tarpeellinen ominaisuus esim. kierroslaskuria käytettäessä. Mutta huomaa, static muuttuja ei ole näkyvä muissa funktioissa, joten sitä ei voi niissä käyttää. Static-määre muuttaa muuttujan elinikää (jatkuva) ja tallennuspaikkaa (pinosta tav. käyttömuistiin). Tästä on ohjelmaesimerkki merkkitaulukoiden esittelyn yhteydessä. Miksi ei main-funktiossa käytetä static-määrittelyä? Koska main-funktiossa määritelty muuttuja on voimassa koko ohjelman ajan, mutta se näkyy vain main-funktiolle. Static-muuttuja on ikäänkuin private global variable, omassa käytössä oleva globaali muuttuja. Vain se funktio jossa se on määritetty, näkee sen ja voi sitä manipuloida. Static tyyppinen muuttuja alustetaan AINA käännösvaiheessa, eli jos sille ei anneta arvoa, c-käännin laittaa arvon nollaksi. Globaalit ja staattiset muuttujat alustetaan systeemin puolesta nollaksi ellei ohjelmoija anna niille alkuarvoja. Automaattisia ja rekisterimuuttujia ei alusteta automaattisesti. Talletusluokka Extern Funktiot ja globaalit muuttujat ovat ohjelmassa kaikkien käytössä. Jos haluamme funktion käyttävän muuttujia, jotka on määritetty jossain toisessa tiedostossa, on kääntimelle kerrottava tämä varatulla sanalla extern. (Isoissa ohjelmissa on kymmenittäin erilaisia tiedostoja). Extern-määrittely kertoo kääntimelle, että tämän muuttujan määrittely löytyy tiedoston ulkopuolelta. Se siis viittaa olemassa olevaan ulkoiseen määrittelyyn. Extern antaa käyttää ulkoista muuttujaa, vaikka se olisi määritelty myöhemmin samassa tai eri tiedostossa. Ellei muuttujalle ole tyyppimääritystä, käännin tulkitse muuttujan tyypiksi extern int. 10

11 Extern esimerkki Kirjoita seuraava koodi ja käännä se normaalisti. /********************************************************** Project : extern_1.c Hardware: PV-M32 + PV-LEDIT on PORTB Software: WinAVR Date : Author : pva Comments: extern-määritys, demo **********************************************************/ #include <avr/io.h> #include <util/delay.h> #include "apu.h" // kerrotaan kääntimelle, että tämä tiedosto on käytettävissä // prototyyppi void wait(uint16_t time); int main(void) { DDRB = 0xFF; // extern unsigned char luku, luku_2; // esittely, ei ole määrittely, vaan käsky etsiä muuttujaa muualta unsigned char luku, luku_2; // aloita tällä, extern rivi kommentoitu = ei toimi // toinen ajo, kommentoi unsigned rivi // ja poista kommenttimerkit extern-rivin alusta while(1) { PORTB = 0x00; wait(200); PORTB = luku; wait(200); PORTB = 0x00; PORTB = luku_2; wait(200); } } // *** Primitive wait() *** void wait(uint16_t time) { volatile uint16_t i; for(i=0;i<2000;i++) _delay_loop_2(time); } Sitten, avaa New File = valkoinen tyhjä sheetti ja kirjoita siihen seuraavat rivit: uint8_t luku = 0x01; uint8_t luku_2 = 0x80; // määrittelyt, muistia on varattu muuttujia varten ja talleta se projektikansioon (se on sama, missä on käännettävä lähdekoodi) nimellä apu.h 11

12 Analysointi 1.) Käännä koodi ensin siten, että luku-muuttujat ovat esitelty ilman asetettua arvoa. Ohjelma kääntyy (pari varoitusta) ja kun ajat sen, niin tulostus on mitä sattuu = LEDit ovat pimeitä, koska muuttujat ovat määrittämättömiä (0). 2.) Lisää sitten muuttujamääritykseen varattu sana extern poistamalla kommenttimerkit rivin alusta. Se kertoo kääntimelle, että muuttujat on määritetty jossain muualla. Käännin löytää määritykset uint8_t luku = 0x01; uint8_t luku_2 = 0x80; apu.h-tiedostosta, joka on liitetty mukaan käännösympäristöön direktiivillä #include "apu.h" Kun nyt käännät ja ajat koodin, tulostus toimii oikein. Extern-määritystä käytetään aina, jos ohjelma koostuu useasta eri tiedostosta. Se on hyvin yleistä sulautetuissa järjestelmissä. Rekisterimuuttujat, Register Variables Kuten AVR-mikro-ohjaimien tekniikkaa käsittelevässä luvussa kerrottiin, SRAMmuistialueeseen kuuluu erityinen rekisterialue, jossa ovat I/O-rekisterit, ajastimet ja muita erityisrekistereitä. Osa näistä rekistereistä on yleiskäyttöisiä, General Purposes Registers. CPU:n sisäisen rekisterin käyttö on huomattavasti nopeampaa kuin (ulkoisen) muistin. Rekisterin käyttö tapahtuu laittamalla avainsana register muuttujan määrittelyn eteen, esim. register char virta; Tämä on vain ehdotus kääntimelle, sillä se saattaa tehdä sen itsekin. Käännin joko huomioi ohjeen eli register-määreen, tai jättää sen huomiotta. Riippuu tilanteesta. Sulautetuissa järjestelmissä on toisinaan tärkeää, että käännin ei käytä CPU:n rekisteriä muuttujan tallentamiseen, vaan käyttää siihen SRAM-muistipaikkaa, mutta siitä tarkemmin rekisteritason ohjelmoinnin yhteydessä. Huomaa! register-esittelyä voidaan käyttää vain automaattisiin muuttujiin ja funktioiden muodollisiin parametreihin. Huom! Älä käytä register-määrittelyä c-koodin yhteydessä!!! avr-gcc-käännin osaa itse käyttää yleisrekistereitä parhaiten. Ainoastaan jos opiskelet assembly-koodin käyttöä, silloin voit itse määrätä mitä yleisrekistereitä käytät. 12

13 Volatile Jos sulautetun systeemin koodin toiminta muuttuu oudoksi kun kytket kääntimen optimoinnin päälle tai otat keskeytyksen käyttöön, on syytä opetella tuntemaan volatile. Kun käännin saa sijoittaa haluamiaan muuttujia rekistereihin, nopeuttaa se ohjelmaa (optimointi). Mutta kun käännin on siirtänyt jonkun muuttujan CPU:n rekisteriin ja kesken kaiken tulee keskeytys joka käsittelee juuri tuota muuttujaa - siis sen muistissa olevaa versiota - on tuloksena ongelmia. Volatile on muuttujan lisämääre joka kieltää käännintä muokkaamasta ohjelmoijan tarkoittamaa koodin toimintaa. Siis käännin ei suorita tälle muuttujalle minkäänlaista optimointia tai muuta järjestelyä. Käyttö: Muuttuja on määritettävä volatileksi, jos sen arvo voi muuttua koodista huolimatta. - kun muuttujan arvo voi muuttua asynkronisesti, siis esim. kun globaalia muuttujaa muokataan keskeytysfunktiossa ja jota arvoa testataan pääkoodissa - samoin jos käytät muistiavaruudessa olevaa oheislaitteen rekisteriä jonka arvo voi muuttua koodista huolimatta - odotat loopissa jossa luetaan I/O-pinnin muuttumista - tai luet timeria - jos yleensä odotat, että jotain tapahtuu, kuten while(!jotain); Syntaksi: volatile int arvo; int volatile arvo; Ihan miten päin vaan. Tutki tarkemmin mallikoodia. Tässä mallikoodissa käytetään timeria, johon tuskin olet vielä perehtynyt. Mutta älä välitä siitä vaan ota koodi käyttöön, niin havaiset volatile-määrityksen merkityksen. 1. kokeile ensin ilman volatile-määritystä, ledit ova pimeitä. 2. sitten ota volatile-määre käyttöön, laskuri toimii ja ledit tulostaa. /********************************************************** Project : volatile.c Hardware: PV-M322 + PV-LEDIT Software: WinAVR Date : Author : pva Comments: volatile-demo, käyttää Timer1 overflow interrupt Ellet määritä laskuri-muuttujaa volatileksi, käännin ei "ymmärrä" että laskuri inkrementoidaan keskeytysrutiinissa, vaan se "luulee", että muuttujan arvo pysyy vakiona. ja LEDit pysyvät pimeänä Kun määritys on volatile, koodi toimii **********************************************************/ 13

14 #include <avr/io.h> #include <avr/interrupt.h> // volatile uint16_t laskuri = 0; // globaali muuttuja uint16_t laskuri = 0; // poista volatile-määritys ja kokeile toiminta // timer_1 overflow interrupt routine ISR(TIMER1_OVF_vect) { laskuri++; // inkrementoidaan laskuria timerin ylivuodon tapahtuessa } int main(void) { DDRB = 0xFF; TCCR1B = 1<<CS11; // kellon jakoluku; clk/8, muuta tätä TIMSK = 1<<TOIE1; // T/C1 Overflow interrupt enable sei(); // globaali keskeytysten sallinta for(;;) // ikuinen silmukka { PORTB = laskuri; } } Volatile sanoo C-kääntimelle: Älä päästä optimoijaa muuttamaan tätä muuttujaa pitämällä sitä pelkästään AVR:n rekisterissä, koska sen arvo voi muuttua (esim. keskeytysfunktiossa). Jos pidät muuttujaa pelkästään rekisterissä, et huomaa sen muuttumista. Joten aina kun tätä muuttujaa käytetään, se on haettava SRAMmista ja palautettava sinne takaisin. Yleinen eli globaali muuttuja, Global Variable Muuttuja voi olla myös ns. yleinen eli globaali. Globaalit muuttujat määritetään lähdekoodin alussa ennen funktioita, siis kaikkien funktioiden ulkopuolella. Huomaa, myös main-funktion ulkopuolella. Siksi globaalit muuttujat ovat voimassa (näkyviä) kaikkialla ohjelmassa. Siis käytettävissä koko koodin alueella. Jos globaalin muuttujan arvoa muutetaan, niin sen uusi arvo on siitä lähtien voimassa kaikissa ohjelman funktioissa. Ellet alusta globaalia muuttujaa, käännin tekee sen itse ja asettaa arvoksi nollan. Isoissa ohjelmissa globaalit muuttujat määritetään yhdessä erityisessä headertiedostossa ja esitellään siellä missä niitä käytetään määreellä extern. extern int jannite; Kun määre on extern, sillä kerrotaan kääntimelle, että muuttuja on määritetty jossain muussa moduulissa. 14

15 Lisää fundeeraamista! Globaali muuttuja asetetaan datamuistiin pysyvästi. Se siis varaa muistia koko ohjelman ajan. Tämä on tärkeää tietää, koska mikro-ohjaimissa on pieni SRAMmuistitila. Yleensä on syytä välttää globaalien muuttujien käyttöä. Iso ongelma saattaa syntyä siitä, että muuttujan arvoa voidaan muuttaa monesta paikkaa. Isoissa ohjelmissa ne saattavat aiheuttaa hyvinkin vaikeasti selvitettäviä virheitä. Paha kauneusvirhe on se, että funktiot eivät tällöin enää ole itsenäisiä, riippumattomia. Pienissä sovelluksissa, kuten meidän 8-bittisen mikro-ohjaimen yhteydessä, pieni SRAM-muistitila rajoittaa globaalien muuttujien käyttöä. Siksi kannattaa opetella heti alkuun oikea ohjelmointityyli ja välttää globaaleja. Jos se suinkin on mahdollista. Globaali muuttuja - on voimassa koko ohjelman ajan ja siten se varaa muistia kaikenaikaa - sen arvoa voi mikä tahansa funktio muuttaa, milloin tahansa. Muuttujan ominaisuuksia Muuttujan määrittelypaikka määrää muuttujan ominaisuudet, ellei sitä ole lisämääreillä toisin kerrottu. Elinikä - aika minkä aikana muuttujan tilanvaraus on voimassa, eli muuttuja on käytettävissä. Funktion (aliohjelma) sisällä määritelty muuttuja elää vain sen ajan kuin funktion käsittely kestää. Lohkojen ulkopuolella määritetty muuttuja on globaali ja se on pysyvä (varaa muistia koko ohjelman ajan). näkyvyys - koodialue mistä muuttujaan voidaan viitata. Funktion sisällä määritetty muuttuja näkyy vain ko. funktion sisällä. Se on paikallinen, lokaali. - Funktioiden ulkopuolella määritetty muuttuja on käytettävissä kaikkialla, se näkyy jokaiselle funktiolle. Se on globaali muuttuja. - kukin funktio eli aliohjelma muodostaa oman näkyvyysalueensa. Kun kutsutaan funktiota, hypätään tämän aliohjelman näkyvyysalueelle. tallennuspaikka - datasegmentti SRAM-muistissa - pinomuisti (SRAM-muistissa) - rekisteri tyyppi - C-kielessä valmiina primitiivisiä tyyppejä, kuten int, char, float - joista voi rakentaa uusia tyyppejä, kuten taulukko, tietue 15

16 Määrite auto(matic) const register extern static typedef volatile Tarkoitus muuttujat ovat oletusarvoisesti tällaisia määritys on voimassa vain siinä funktiossa missä se on määritelty, se on siis paikallinen - local muuttujan arvo on vakio määrittelee muuttujan paikalliseksi ja määritys kehottaa käännintä pitämään muuttujan rekisterissä. Tämä on lähinnä isojen koneitten ominaisuus, pienissä sulautetuissa järjestelmissä tätä ei tarvita, (rekisterien käyttö on oletuksena). Älä käytä sulautetuissa. muuttuja tai funktio on määritelty toisessa tiedostossa muuttuja on olemassa ohjelman suorituksen ajan muuttuja alustetaan funktiossa kerran ja sen arvo säilyy vaikka funktiosta välillä poistutaankin käyttö: laskurit yms. tyyppimäärittely arvo voi muuttua ulkoisista syistä Seuraavassa harjaannutaan edelleen käänninympäristön käyttöön ja opitaan lisää C- kielen käsitteitä, kuten * vakion määritys * operaattori * operandi Vakio, constant Vakio on myös ohjelman käyttämä muistipaikka, mutta sen sisältöä ei voi muuttaa ohjelman ajon aikana. Vakion sisältö on, kuten nimikin sanoo, muuttumaton, staattinen. Se täytyy alustaa esittelyn yhteydessä. Miksi käytetään vakioita? Kun ryhdyt kirjoittamaan isoja ohjelmia, joissa voi olla satoja (tuhansia?) koodirivejä, niin silloin huomaat vakion määrityksen merkityksen. Sama lukuarvo saattaa esiintyä useita kertoja koodin sisällä. Jos jostain syystä em. lukuarvoa on myöhemmin muutettava, jokaisen ilmenemispaikan etsintä on työlästä. Käyttämällä vakion määritystä kerran ohjelman alussa ja sen jälkeen käytetään koodissa vain sitä. Jos myöhemmin vakion arvo täytyy jostain syystä muuttaa, riittää arvon korjaus vain yhdessä kohdassa ohjelmaa. 16

17 1. Numeeriset vakiot Numeerinen vakio on arvo, joka kirjoitetaan suoraan lähdekoodiin aina tarvittaessa. Se voidaan tarpeen mukaan kirjoittaa eri muodossa. Kokonaislukuvakiot voidaan kirjoittaa: desimaaliluku, ilman etuliitettä esim heksaluku, etuliite on 0x esim. 0xF0 oktaaliluku, etuliite on 0 esim int kierrosluku = 12; PORTB = 0xA6; float alv_vero = 0.22; Kierrosluku ja alv_vero ovat muuttujia, porttimääritys on ns. makro. (selviää myöhemmin). Sijoitusoperaattorin (=-merkin) oikealla puolella olevat arvot ovat numeerisia vakioita. Desimaalipiste erottaa liukulukuvakion kokonaislukuvakiosta. 2. Merkkivakiot Merkkivakio voi olla tulostettava (kuten aakkoset), tai ei-tulostettava (kuten rivin vaihto new line, tabulaattori tab). Tulostettavat merkkivakiot kirjoitetaan ympäröimällä merkki heittomerkeillä, esim. A, joka on heksamuodossa 0x41. Eitulostettavat merkkivakiot ovat ns. ohjausmerkkejä, kuten \n, new line, \x0a heksalukuna, jolla siirretään kursori seuraavalle riville, tai tabulointimerkki \t, heksana \x Symboliset vakiot on vakioita, joita ohjelmassa esittää nimi, symboli. Sitä ei voi ohjelman ajon aikana muuttaa. Käytön etuna on koodin selkeys. Ne otetaan esikääntimen käsittelyyn samoin kuin header-tiedostot, eli risuaitamerkillä #. #define VAKIONIMI arvo - #define, määritä, on, kuten muistanet, esikääntimen komento - käännin korvaa VAKIONIMI-tekstin arvolla arvo - define-rivi ei pääty puolipisteeseen #define JANNITE 10 - esikäännin suorittaa yksinkertaisen tekstikorvauksen, aina kun se näkee sanan JANNITE, se korvaa sen luvulla 10. Itse käännin ei näe koskaan JANNITE nimeä, vaan ainoastaan arvon 10. Makro on esikääntimen komento. Makron nimi korvataan koodilla, joka suorittaa varsinaisen toiminnon: #define NIMI korvaus_teksti Makro kirjoitetaan tavallisesti isoilla kirjaimilla, jotta se erottuisi muista määrityksistä ja sen loppuun ei tule puolipistettä. Tässä esitetty makro on ns. yksinkertainen makro, siis pelkkä tekstikorvaus. Se voi olla myös monimutkaisempi, jolloin makro sisältää parametreja. 17

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma

5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma 5.6. C-kielen perusteet, osa 6/8, Taulukko 6.1.2008, pva, kuvat jma Every cloud has a silver line. - englantilainen sananlasku Tässä osiossa tärkeää: yksi- ja moniulotteinen taulukko Sisältö Yleistä Yksiulotteinen

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII Liitteet Liitteet A B C Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto Osa VIII A. Liite Operaattoreiden suoritusjärjestys On tärkeää ymmärtää, että operaattoreilla on prioriteettinsa,

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

Tietotyypit ja operaattorit

Tietotyypit ja operaattorit Tietotyypit ja operaattorit Luennossa tarkastellaan yksinkertaisten tietotyyppien int, double ja char muunnoksia tyypistä toiseen sekä esitellään uusia operaatioita. Numeeriset tietotyypit ja muunnos Merkkitieto

Lisätiedot

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Ohjelmointiharjoituksia Arduino-ympäristössä

Ohjelmointiharjoituksia Arduino-ympäristössä Ohjelmointiharjoituksia Arduino-ympäristössä Yleistä Arduino-sovelluksen rakenne Syntaksi ja käytännöt Esimerkki ohjelman rakenteesta Muuttujat ja tietotyypit Tietotyypit Esimerkkejä tietotyypeistä Ehtolauseet

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

1. luento. Ohjelmointi (C) T0004 Syksy 2003. 1. luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

1. luento. Ohjelmointi (C) T0004 Syksy 2003. 1. luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot. EVTEK Teknillinen ammattikorkeakoulu Ohjelmointi (C) T0004 Syksy 2003 Olli Hämäläinen kurssin sisältö ja tavoitteet työmuodot luennot 1-2/2003 laboratorioharjoitukset 1-2/2003 kotitehtävät, laboratoriokerrat

Lisätiedot

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100 Tiedonsiirtokäskyt LOAD LOAD-käsky toimii jälkimmäisestä operandista ensimmäiseen. Ensimmäisen operandin pitää olla rekisteri, toinen voi olla rekisteri, vakio tai muistiosoite (myös muuttujat ovat muistiosoitteita).

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle ELEC-A4010 Sähköpaja Arduinon ohjelmointi Jukka Helle Arduino UNO R3 6-20VDC 5VDC muunnin 16 MHz kideoskillaattori USB-sarjamuunnin (ATmega16U2) ATmega328 -mikro-ohjain 14 digitaalista I/O väylää 6 kpl

Lisätiedot

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

Lisätiedot

Tietueet. Tietueiden määrittely

Tietueet. Tietueiden määrittely Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään

Lisätiedot

Python-koodaus: Muuttujat

Python-koodaus: Muuttujat Python-koodaus: Muuttujat PUNOMO NETWORKS OY 24.7 && 4.8.2016 pva Oletus Sinulla on Raspin Geany-IDE konfiguroituna toimimaan SSH-etäkäytössä. Tämä on Punomon Python koodikoulun toinen oppitunti. Käynnistä

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

6.3. AVR_rauta. EEPROM-muisti 09.12.2007 pva

6.3. AVR_rauta. EEPROM-muisti 09.12.2007 pva 6.3. AVR_rauta. EEPROM-muisti 09.12.2007 pva Experience is what causes people to make new mistakes instead of old ones... - Unknown Sisältö Yleistä EEPROM-rekisterit Protoilu-ohje EEPROMmista ja Fuse-biteistä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa ssa ohjelman käytössä suoritusaikana oleva muisti jakautuu neljään osaan: koodisegmentti datasegmentti pinosegmentti (stack) kasa (heap) ssa ohjelman koodisegmentti sisältää käännetyn ohjelmakoodin sisältö

Lisätiedot

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tyyppejä ja vähän muutakin TIEA341 Funktio ohjelmointi 1 Syksy 2005 Viime luennolla... Haskellin alkeita pääasiassa Hello World!... ja muita tutunoloisia ohjelmia Haskellilla Haskellin voima on kuitenkin

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

Lisätiedot

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

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet 7.1.2008 pva

5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet 7.1.2008 pva 5.4. Sulautetun järjestelmän C-kielen perusteet. 4/8. Ohjausrakenteet 7.1.2008 pva Superohjelmoija on insinörttitaiteilija ja ryhtyessään koodaamaan, hän keskittyy kunnolla, leijuu jonnekin sfääreihin

Lisätiedot

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

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

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

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely

Lisätiedot

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

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

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

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukot C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa. Taulukon muuttujilla (muistipaikoilla) on yhteinen nimi. Jokaiseen yksittäiseen

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit. 3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

Osoitin ja viittaus C++:ssa

Osoitin ja viittaus C++:ssa Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 2. Lukujen esittäminen ja aritmetiikka 2.1 Kantajärjestelmät ja lukujen esittäminen Käytettävät lukujoukot: Luonnolliset luvut IN = {0,1,2,3,... } Positiiviset kokonaisluvut

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 13.9.2017 CS-A1111 Ohjelmoinnin peruskurssi Y1 13.9.2017 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU

Ohjelmointi 2. Jussi Pohjolainen. TAMK» Tieto- ja viestintäteknologia , Jussi Pohjolainen TAMPEREEN AMMATTIKORKEAKOULU Ohjelmointi 2 Jussi Pohjolainen TAMK» Tieto- ja viestintäteknologia Tietotyypeistä C++ - kielessä useita tietotyyppejä Kirjaimet: char, wchar_t Kokonaisluvut: short, int, long Liukuluvut: float, double

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out Digitaalitekniikan matematiikka Luku ivu (2).9.2 Fe C = Aseta Aseta i i = n i > i i i Ei i < i i i Ei i i = Ei i i = i i -- On On On C in > < = CI CO C out -- = + (-) (-) = + = C + Digitaalitekniikan matematiikka

Lisätiedot

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

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4) 2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi

Lisätiedot

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin Ohjausjärjestelmien jatkokurssi Visual Basic vinkkejä ohjelmointiin http://www.techsoft.fi/oskillaattoripiirit.htm http://www.mol.fi/paikat/job.do?lang=fi&jobid=7852109&index=240&anchor=7852109 Yksiköt

Lisätiedot

Perustietotyypit ja laskutoimitukset

Perustietotyypit ja laskutoimitukset Perustietotyypit ja laskutoimitukset 2 Perustietotyypit ja laskutoimitukset Tässä luvussa käsittelemme C++:n perustietotyyppejä, varsinkin sellaisia kuin sinä mitä todennäköisemmin tulet käyttämään omissa

Lisätiedot

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys Loogisia operaatioita - esimerkkejä Tänään on lämmin päivä ja perjantai Eilen satoi ja oli keskiviikko tai tänään on tiistai. On perjantai ja kello on yli 13 Ei ole tiistai tai ei sada. Ei pidä paikkaansa,

Lisätiedot

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on

1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on 1. Esittelyt ja vakiot 1.1 Esittelyt (declarations) Ennen nimen, tunnuksen (identifier) käyttöä se on esiteltävä. char ch; int count=1; struct complex float re, im; complex z; complex sqrt( complex );

Lisätiedot

Verilogvs. VHDL. Janne Koljonen University of Vaasa

Verilogvs. VHDL. Janne Koljonen University of Vaasa Verilogvs. VHDL Janne Koljonen University of Vaasa Sälää Huom! Verilogistauseita versioita: 1995, 2001 ja 2005. Kommentit Javasta tutut // ja /* */ ovat kommenttimerkkejä. Case sensitivity Isot ja pienet

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

TAITAJA 2007 ELEKTRONIIKKAFINAALI 31.01-02.02.07 KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro: KILPAILIJAN TEHTÄVÄT Kilpailijan nimi / Nro: Tehtävän laatinut: Hannu Laurikainen, Deltabit Oy Kilpailutehtävä Kilpailijalle annetaan tehtävässä tarvittavat ohjelmakoodit. Tämä ohjelma on tehty laitteen

Lisätiedot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat ja operaatiot 3. Muuttujat ja operaatiot Sisällys Muuttujat. Nimi ja arvo. Algoritmin tila. Muuttujan nimeäminen. Muuttujan tyyppi. Muuttuja ja tietokone. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeetiikka.

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit:

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

Paavo Räisänen. Ohjelmoijan binaarialgebra ja heksaluvut. www.ohjelmoimaan.net

Paavo Räisänen. Ohjelmoijan binaarialgebra ja heksaluvut. www.ohjelmoimaan.net Paavo Räisänen Ohjelmoijan binaarialgebra ja heksaluvut www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta

Lisätiedot

Tietorakenteet ja algoritmit

Tietorakenteet ja algoritmit Tietorakenteet ja algoritmit Pino Pinon määritelmä Pinon sovelluksia Järjestyksen kääntäminen Palindromiprobleema Postfix-lausekkeen laskenta Infix-lausekkeen muunto postfix-lausekkeeksi Sisäkkäiset funktiokutsut

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

Kielioppia: toisin kuin Javassa

Kielioppia: toisin kuin Javassa Object Pascal Pascal kielen oliolaajennus (Inprise/Borland:n oma) luokat Voit uudelleenkäyttää luomiasi objekteja esim. komponentteja Periytyminen Kielioppia: toisin kuin Javassa Ei eroa isojen ja pienien

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut. boolean- ja char-tyypit. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

13 Operaattoreiden ylimäärittelyjä

13 Operaattoreiden ylimäärittelyjä 248 13 C++-kielessä voidaan operaattoreita ylimäärittää. Ylimääriteltävää operaattoria voidaan pitää ikäänkuin metodina, joka esitellään luokan esittelyssä ja määritellään luokan ulkopuolella kuten metoditkin.

Lisätiedot

Ohjelmoijan binaarialgebra ja heksaluvut

Ohjelmoijan binaarialgebra ja heksaluvut Paavo Räisänen Ohjelmoijan binaarialgebra ja heksaluvut www.ohjelmoinaan.net Tätä opasta saa vapaasti kopioida, tulostaa ja levittää ei kaupallisissa tarkoituksissa. Kuitenkaan omille nettisivuille opasta

Lisätiedot

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

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. TIETOKONEOHJELMIEN RAKENNE Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä. Teollisuusautomaation ohjelmiin on lainattu runsaasti perinteisen

Lisätiedot

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä 2) Kahdesta rinnankytketystä sähkölähteestä a) kuormittuu enemmän se, kummalla on

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva

Sisällys. 6. Muuttujat ja Java. Muuttujien nimeäminen. Muuttujien nimeäminen. salinovi tai syntymapaiva Sisällys 6. Muuttujat ja Java Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

6. Muuttujat ja Java 6.1

6. Muuttujat ja Java 6.1 6. Muuttujat ja Java 6.1 Sisällys Muuttujien nimeäminen. Muuttujan tyypin määritys. Javan tietotyypit: Kokonais- ja liukuluvut, merkit, totuusarvot. Tyyppien yhteensopivuus. Viitetietotyypit ja merkkijonotietotyyppi

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 14.9.2016 CS-A1111 Ohjelmoinnin peruskurssi Y1 14.9.2016 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille: Merkkijonot C-kielessä merkkijono on taulukko, jonka alkiot ovat char -tyyppiä. Taulukon viimeiseksi merkiksi tulee merkki '\0', joka ilmaisee merkkijonon loppumisen. Merkkijono määritellään kuten muutkin

Lisätiedot

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen.9.2 Fe Lukujärjestelmät Kymmen- eli desimaalijärjestelmä: kantaluku perinteisesti käytetty ja tuttu numerot,,

Lisätiedot

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2 PERUSLASKUJA Matemaattisten lausekkeiden syöttäminen: Kirjoita ilman välilyöntejä /+^2 Kirjoita muuten sama, mutta ota välilyönti :n jälkeen / +^2 Kopioi molemmat matematiikka-alueet ja liiku alueen sisällä

Lisätiedot

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen Metodit Metodien määrittely Metodin parametrit ja paluuarvo Metodien suorittaminen eli kutsuminen Metodien kuormittaminen 1 Mikä on metodi? Metodi on luokan sisällä oleva yhteenkuuluvien toimintojen kokonaisuus

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 12.9.2018 CS-A1111 Ohjelmoinnin peruskurssi Y1 12.9.2018 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi.

\+jokin merkki tarkoittaa erikoismerkkiä; \n = uusi rivi. 1. Johdanto 1.1 Yleistä Suurten ohjelmien organisointi vaikeaa C:ssä. 1980 Stroustrup lisäsi C:hen olio-ohjelmoinnin (OOP = Object Oriented Programming). C C++: C-ohjelma on (muutamia poikkeuksia lukuunottamatta)

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 9.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 9.9.2015 1 / 26 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2011 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2011 1 / 39 Haluatko antaa palautetta luennoista? Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti Vast

Lisätiedot

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2015 Työkaluista Perinteinen: komentorivi + tekstieditori Editori: esimerkiksi Kate, Notepad++, Aquamacs (Emacs) Ohjelman kääntäminen ja suorittaminen komentoriviterminaalissa TMC - komentorivityökalu

Lisätiedot

Muuttujat ja kontrolli. Ville Sundberg

Muuttujat ja kontrolli. Ville Sundberg Muuttujat ja kontrolli Ville Sundberg 14.9.2007 Alkeistyyppi Alin abstraktiotaso josta tarvitsee välittää Yksittäinen, jakamaton tiedonjyvä Tavallaan kaikki alkeistyypit ovat lukuja arvojoukko vaihtelee

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CS-A1111 11.9.2019 CS-A1111 Ohjelmoinnin peruskurssi Y1 11.9.2019 1 / 19 Oppimistavoitteet: tämän luennon jälkeen osaat kirjoittaa Python-ohjelman, joka pyytää käyttäjältä lukuja,

Lisätiedot

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

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja

Lisätiedot