23
1 AVRStudion käyttö - lähdekoodin kirjoittaminen - lähdekoodin kääntäminen - konekoodin lataus AVR:n flash-muistiin 2.8.2008 pva ”Luovuuden salaisuus on siinä, että osaat piilottaa lähteesi.” - Albert Einstein Sisältö 1. C-lähdekoodin kirjoittaminen 2. C-lähdekoodin kääntäminen 3. ulkoisen makefile-tiedoston käyttö 4. Konekoodin lataaminen AVR:n ohjelma- eli flash-muistiin a. JTAGICE, USB b. AVRISP mkII, USB c. STK500 v2, USB Koodin debuggauksesta AVRStudion avulla, siis simuloinnista ja emuloinnista, on omat ohjeet. Mikroprosessorin ohjelma Ohjelma perustuu binäärikoodiin, joka tosiasiassa on peräkkäisiä binäärilukuja flash- ohjelmamuistissa. Tai vielä oikeammin ne ovat jännitetasoja, joita ohjataan CPU:n transistoreilla. Prosessori osaa tulkita nuo binääriluvut/jännitetasot käskykoodiksi, osoitteiksi ja dataksi.

0.3. AVRStudio_ ohjelman_tekeminen

Embed Size (px)

Citation preview

Page 1: 0.3. AVRStudio_ ohjelman_tekeminen

1

AVRStudion käyttö - lähdekoodin kirjoittaminen - lähdekoodin kääntäminen - konekoodin lataus AVR:n flash-muistiin 2.8.2008 pva ”Luovuuden salaisuus on siinä,

että osaat piilottaa lähteesi.” − Albert Einstein

Sisältö

1. C-lähdekoodin kirjoittaminen 2. C-lähdekoodin kääntäminen 3. ulkoisen makefile-tiedoston käyttö 4. Konekoodin lataaminen AVR:n ohjelma- eli flash-muistiin

a. JTAGICE, USB b. AVRISP mkII, USB c. STK500 v2, USB

Koodin debuggauksesta AVRStudion avulla, siis simuloinnista ja emuloinnista, on omat ohjeet.

Mikroprosessorin ohjelma Ohjelma perustuu binäärikoodiin, joka tosiasiassa on peräkkäisiä binäärilukuja flash-ohjelmamuistissa. Tai vielä oikeammin ne ovat jännitetasoja, joita ohjataan CPU:n transistoreilla. Prosessori osaa tulkita nuo binääriluvut/jännitetasot käskykoodiksi, osoitteiksi ja dataksi.

Page 2: 0.3. AVRStudio_ ohjelman_tekeminen

2

Koneläheinen ohjelmointi hoidetaan nykyisin assemblylla, jossa konekieliselle käskylle annetaan muistisymbolit, AND, OR, MUL, GOTO… Sitä kutsutaan myös symboliseksi konekieleksi Prosessorin ymmärtämä binäärikoodi tuotetaan assembler-kääntimellä Ohjelmakehitys voidaan tehdä myös korkeamman tason kielellä, yleensä C-kielellä

- päästään suurempaan laitteistoriippumattomuuteen (ANCI-C) - ohjelmakirjoitus nopeutuu, yksi C-käsky = useita assembly-käskyjä - C-kääntimet tuottavat ”löysempää” koodia, siis se tarvitsee huomattavasti enemmän

ohjelmamuistia kuin vastaava assembly-koodi Varmistu, että AVRStudio on asennettuna. (sille on erillinen ohje). AVRStudio4Setup.exe, 91’964 kB. Versio on 4.14. (02.08.2008).

Varmistu, että olet asentanut PC-koneelle WinAVR-työkalupaketin (ja samalla avr-gcc-kääntimen) ja sille Virtual COM-ajurit. Niistä on omat ohjeet.

Varmistu, että Sinulla on käytettävissäsi Atmelin ATmega32 ohjaimen datasheet doc2503.pdf, sen koko on 5,382 MB. Se löytyy osoitteesta: www.atmel.com

Ohjelmia varten kannattaa tehdä oma kansio, johon projektikansiot talletetaan. esim. D:\Omat_koodit\m32.

Page 3: 0.3. AVRStudio_ ohjelman_tekeminen

3

AVRStudiossa olevaa kääntimen kutsunappia, Build, painamalla, käynnistyy C:\WinAVR-20080610\utils\bin-hakemistossa olevan make.exe ja tämä puolestaan lukee käännösohjeet makefile-tiedostosta. Sitten make kutsuu C:\WinAVR-20080610\bin-hakemistosta avr-gcc:tä kääntämään työhakemistossa oleva lähdekoodi eka.c. Jos koodi on C-kieliopillisesti oikein, niin käännöstuloksena syntyy useita eri tiedostoja.

- Flash-muistiin kirjoitettava ajokelpoinen koodi on *.hex-päätteellä, - AVRStudio-emulaattoriohjelman tarvitsema koodi on *.elf-päätteinen, - EEPROM-muistiin tarkoitettu *.eep-päätteinen, - jne.

Page 4: 0.3. AVRStudio_ ohjelman_tekeminen

4

Ohjelmakoodin kirjoittaminen Kirjoitetaan varsinainen ohjelmakoodi algoritmikuvausten perusteella Käännetään konekielelle (Compiler) Yhdistetään (linkataan) eri ohjelmamoduulit toisiinsa (Linker) Sijoitetaan prosessorin ohjelmamuistiin, Loader AVR Studio ja C-kielisen ohjelman kirjoitus, kääntäminen ja lataus PV-M322-kortin AVR-ohjaimen flash-muistiin. Kun ohjelma käynnistyy, se kysyy aloitetaanko uusi projekti vai avataanko jo olemassa oleva tiedosto. Vaihtoehtoina on joko assembly- tai c-kielinen projekti. (Jos et ole ensimmäistä kertaa asialla, listassa saattaa olla aikaisempia projekteja).

Luodaan uusi projekti: paina New Project. Luo aina jokaisesta koodista oma projekti. Näin kaikki yhteen kuuluvat tiedostot löytyvät aina samasta paikasta. Sinne on kopioitava myös koodin käyttämät header-tiedostot ja mahdolliset c-tiedostot ( esim. lcd_tat.h ja lcd_tat.c). Ja voit lisätä projektikansioon tarvittaessa vaikka koodiin kuuluvan komponentin *.pdf-tiedoston, tms.

Page 5: 0.3. AVRStudio_ ohjelman_tekeminen

5

Seuraavaksi ohjelma kysyy valitaanko C-käännin vaiko assembler. Tehdään koodia C-kielellä, joten valitaan AVRGCC.

Project type: AVR GCC Project name: eka Initial file: eka.c, ohjelma tekee itse, anna olla tämä, tässä vaiheessa. Location: D:\Omat_koodit\m32 Varmistua, että Location osoittaa oikeaan hakemistoon. Muuten et löydä projektiasi. Edetään seuraavaan vaiheeseen ( Next >> ), jossa valitaan JTAG ICE ja mikro-ohjain ATmega32,. Ohjaimen JTAGEN-bitti pitää olla ”päällä”, enabled, se mahdollistaa JTAGin käytön.

Port, valitse se joka Sinulla on käytössä, siis 4. Auto ei aina osaa. Kun tiedot on valittu, painetaan Finish.

Page 6: 0.3. AVRStudio_ ohjelman_tekeminen

6

Seuraavaksi kerrotaan AVRStudiolle, että käytetään WinAVR-ympäristöä ja sen avr-gcc-käännintä eli Project -> Configuration Options -> General

Varmistu: että Device, AVR-ohjain, on se mikä Sinulla on käytössä, tässä atmega32 että Frequency, AVR:n kellotaajuus, on oikea, tässä 4 MHz että Optimization, optimointi on oikea. Ellet tiedä mitä tehdä, valitse aina Os. että kaikki muutkin ”kruksit” on asetettu kuvan mukaan. Nämä asetukset tulevat (ensiasennuksen jälkeen) aina oletuksena oikein, mutta on hyvä tapa varmistua asiasta joka kerta kun aloitat uuden projektin. Optimointi C-kielinen lähdekoodi voidaan käännösvaiheessa optimoida joko käännetyn koodin ajonopeuden tai koodin koon suhteen. Konekoodin nopeutta parantaa mm.

- hyppyjen minimointi, koska pitkät hypyt ovat hitaita - rekisterimuuttujien käyttö - pinon käytön minimointi, pinoon talletetaan vain oleellinen

Konekoodin kokoa pienentää mm.

- jos koodi käyttää paljon hyppykäskyjä - pyritään käyttämään samaa koodia (eli se on jaettu funktioihin) moneen kertaan, joka

puolestaan merkitsee pinon käytön maksimointia Niin kuin ylläolevasta näet, optimointitoiveet ovat vastakkaisia, joten pitää löytää kompromissi. Ellei esim. syynä ole käytettävän muistin koko.

Page 7: 0.3. AVRStudio_ ohjelman_tekeminen

7

Mitä optimointiparametria tulisi käyttää? AVR-GCC kääntimen toimintaa optimoimalla voidaan kääntää koodi tavoitteena joko pieni koodin koko tai koodin ajonopeus tai näiden yhdistelmä. Which -O flag to use?

Ylläoleva taulukko ja muuta asiaan liittyvää: Avaa C:\WinAVR-20080610\doc\avr-libc ja sieltä avaa avr-libc-user-manual.pdf ja sieltä FAQ ja edelleen 9.10.17 Which -O flag to use?. Yleisimmin itse käytän –Os optimointia, koska se tekee pientä koodia ja kuitenkin nopeaa. Jos nopeus on tärkeintä valitse –O3. Jos koko on tärkeintä, käytä optiota –O1. Käännösoptio Koodin koko C-koodi 711 B -O0 815 B -O1 709 B -O2 807 B -O3 807 B -Os 762 B Ylläolevassa taulukossa on pienen käännöstestin tulos. Käännettävä C-koodi on yksinkertainen ja pieni, vain 711 tavua. Mutta tästäkin jo huomaa, että ilman optimointia koodin koko on iso. Ja ero vain suurenee kun koodi monimutkaistuu. Älä käännä C-koodia ilman optimointia, käännöstulos on silloin turhan suuri. Optimoinnin asetus Avaa AVRStudiossa: Project, Configuration Options ja sieltä välilehti General. Valitse Optimization-ikkunaan oikea parametri, suositus -Os.

Page 8: 0.3. AVRStudio_ ohjelman_tekeminen

8

C-kääntimen konfigurointi Ja vielä varmistu, että Custom Options ikkunassa on: External Tools, Use WinAVR. Jos asensit ensin WinAVR-paketin ja vasta sitten AVRStudion, nämä ovat oikein.

AVRStudion keskellä olevaan editori-ikkunaan voidaan nyt kirjoittaa varsinaisen ohjelma-koodi. Olkoon aluksi mahdollisimman simppeli, vaikka:

Talleta. File, Save.

Page 9: 0.3. AVRStudio_ ohjelman_tekeminen

9

Rivi- ja sarakelaskurikin löytyy

Ikkunnan oikeassa alalaidassa on kerrottu missä kursori seilaa. Ln, line –rivi 37 Col, Colume – sarake, 1 C-kääntimen kutsu Tapahtuu alasvetovalikosta (vasemmalla, ylhäällä) valitse Build, Build, tai painamalla F7. tai

pikanäppäimellä: C-kääntimen kutsunappi konfiguroituu automaattisesti ohjelmien asennusten yhteydessä. Napin painalluksella käännin kääntää editorissa avoinna olevan projektin lähdekoodin. Kääntimen kutsu tapahtuu epäsuorasti, ensin kutsutaan make.exe-ohjelma. Make lukee käännösohjeet makefile-tiedostosta, jotta se tietää mille ohjaimelle käännetään, miten eli mitä käännostuloksia tarvitaan ja mitkä ovat käännettävien tiedostojen riippuvuudet toisistaan.

Vasempaan ikkunaan tulostuvat kaikki koodin käyttämät headerit. Saat halutun tiedoston auki koodi-ikkunaan kaksoisklikkaamalla nimeä.

Page 10: 0.3. AVRStudio_ ohjelman_tekeminen

10

Jos koodin kirjoittamisessa syntyi virhe, käännin indikoi siitä alaikkunassa.

Kaksoisklikkaa punaisen pallon virheriviä ja kursori hyppää editorissa ko. riville. Tämä on hyvä oppia heti. Kuten huomaat, virheen tunnistus on useasti ”jossain sielläpäin”, riippuen virheen laadusta. Normaalisti se arvaa virheen aika hyvin. Aloita koodin korjaaminen aina ylimmältä virheriviltä, usein yhden virheen korjaaminen poistaa monta muutakin virheilmoitusta. Jos käännös onnistui:

Jos kaikki OK, niin ikkunan alalaitaan tulee infoa onnistumisesta.

Page 11: 0.3. AVRStudio_ ohjelman_tekeminen

11

Koko AVRStudio ikkunoineen näyttää tältä. Tässä turhan pieni, katso omasta koneesta.

Keskellä on editori-ikkuna koodin kirjoittamista varten. Vasemmalla on hakemistopuu, jossa on esillä kaikki projektiin kuuluvast tiedostot. Klikkaamalla headeria se avautuu editori-ikkunaan. Jos käännettäviä c-tiedostoja on koodin lisäksi muitakin, ne on ensin kopioitava projektikansioon ja sitten lisättävä projektiin, Add Exixting Source File(s)….

Alla on info-ikkuna, jossa on tieto käännöksen kulusta ja onnistumisesta. Oikealla olevaa info-ikkunan käyttöä opiskellaan erillisessä Microsalon emulointi-dokumentissa.

Page 12: 0.3. AVRStudio_ ohjelman_tekeminen

12

Tarkista: G:\Omat_koodit\m32\eka\ Siis siellä on default-alihakemisto, eka.c ja projektiedosto eka.aps.

Ja default-kansiosta löytyy:

Sieltä löytyvät kaikki käännöstulokset ja Huom! Makefile avr-gcc-kääntimen käytössä alkuvaiheessa on ongelmana makefile-tiedosto. Makefile on tekstitiedosto, josta make-ohjelma lukee ohjeet miten koodi käännetään yms. tarvitsemaansa infoa. Siitä on oma dokumentti. Nyt ei aloittelijan tarvitse välittää makefile-tiedostosta enää mitään, koska AVRStudio osaa tehdä tarvitsemansa ohjetiedoston itse. Mutta jos tähtäät ammattilaiseksi, Sinun kannattaa tutustua makefileen sisältöön ja käyttöön erillisessä Micorosalon tekemässä ohjeessa.

Page 13: 0.3. AVRStudio_ ohjelman_tekeminen

13

Tässä eka-projektin makefile. Mitä käännösprosessissa tapahtuu?

• Esikäännin lukee otsikkotiedostot, tulostaa C-koodia, jossa ei ole esikääntimen komentoja (se poistaa direktiivit eli #-alkuiset rivit).

• Varsinainen C-käännin lukee em. C-koodin ja tulostaa tekstimuotoista symbolista konekieltä, assemblyä.

• Sitten käynnistetään, automaattisesti, assembler-käännin, joka kääntää symbolisen konekielen oikeaan konekieleen (binäärimuotoon) objektitiedostoksi. Assembly-kielellä ohjelmoidut osat käännetään tietysti vain assembler-kääntimellä.

• Linkkeri kokoaa yhteen objektitiedostot, startup-modulin, tarvittavat C:n standardikirjaston tiedostot, sekä mahdolliset ohjelmoijan luettelemat muut kirjastot ajettavaksi ohjelmaksi.

Linkkeri lukee komentotiedostostaan kohteena olevan sulautetun järjestelmän muistiosoitteet ja muodostaa ohjelman, joka sisältää pelkästään absoluuttisia muistiviittauksia. Tässä vaiheessa linkitetään siis ohjelmoijan kirjoittama ohjelmakoodi ja kääntimen mukana toimitetussa ohjelmakirjastosta ne koodit, joihin viitataan esikääntimen direktiiveissä. Resetoinnin jälkeen CPU aloittaa ohjelman suorituksen startup-objektitiedoston alusta. Tämä alustaa pinon ja vähän muutakin ja kutsuu sitten main-funktiota.

On tärkeää ymmärtää * et voi kääntää sulautetun systeemin ohjelmaasi PC:n Pentiumille koodia tekevällä kääntimellä, esim. C++Builderilla, * vaan jokaiselle mikro-ohjainperheelle tarvitaan oma C-käännin.

Page 14: 0.3. AVRStudio_ ohjelman_tekeminen

14

Ohjelman lataus AVR:n flash-muistiin Konekoodin lataaminen AVR:n ohjelma- eli flash-muistiin voi tapahtua monella eri laitteella: tässä muutamia malliksi (käytössä AVRStudiossa),

ja muitakin mahdollisuuksia löytyy Ohjelman lataus JTAGICE-liitännän kautta AVRStudio on tarkoitettu toimimaan yhdessä Atmelin STK500-kitin kanssa, joten ohjelmassa on lataaja- (loader-) eli ohjelmointiohjelma, joka toimii sarjaportin kautta. PV-M322-kortissa sarjaportti on korvattu USB-liitännällä, muuten ohjelmointi toimii täysin samalla tavalla. Käynnistä AVR Programmer: Tools, Program AVR Connect.

PV-M322-kortilla on valmiina JTAGICE-liitäntä (Atmega16). Jos Sinun AVR-kortillasi on erillinen JTAG-liitäntä ja Sinulla on erillinen JTAGICE-ohjelmointilaite, niin silläkin koodin lataus onnistuu. PC-koneessa on oltava Virtual-COM asennettuna, kts. erillinen ohje. Liitä USB-kaapeli PC-koneen ja PV-M322-kortin välille. Varmistu Virtual-COM-portin numero.

Page 15: 0.3. AVRStudio_ ohjelman_tekeminen

15

AVR:n ohjelmointi, koodin lataaminen, ”loudaus”, ”f lassäys”

Sitä varten on kolme nappia, vasen avaa ohjelman valintaikkunan, keskimmäinen avaa itse ohjelmointiohjelman ja oikeanpuoleinen työntää käännetyn *.hex-koodin suoraan kortille (ennalta valituin asetuksin määritettynä). AVRStudion alasvetovalikosta valitse Tools, Program AVR, Connect…

Valitse JTAGICE ja COM4.. Paina Connect.

Avautuu seuraavanlainen ikkuna.

Page 16: 0.3. AVRStudio_ ohjelman_tekeminen

16

Valitse Main välilehti. Varmistu, että Device and Signature Bytes on Atmega32. Paina Read Signature-nappia.

Page 17: 0.3. AVRStudio_ ohjelman_tekeminen

17

Valitse Program-välilehti. Varmistu että kruksit ovat edellä olevan kuvan mukaisesti. Etsi projektikansiosta Flash-ikkunaan Input Hex File-ruutuun eka.hex. Paina Program-nappia. Koodi siirtyy parissa sekunnissa PC-koneesta AVR:n flash- eli ohjelmamuistiin ja PV-M322-kortin B-portissa olevat ledit alkavat vilkkua ohjelman tahdissa. Muuta koodia (viive-aikaa ja porttiin kirjoitettavia lukuja), käännä ja lataa koodi AVR:ään. Tarkastele lopputulosta. Ohjelman lataus AVR:n flash-muistiin AVRISP mkII av ulla AVRStudio osaa myös AVR ISP-systeemin mukaisen ohjelmointiliitännän joka käyttää USB-liitännän kautta AVRISP mkII-ohjelmointimoduulia.

AVRISP mkII liitetään PC:n USB-liitäntään. Mitään varsinaista konfigurointia ei tarvita, laite on heti käyttövalmis. Vihreä LED laitteen päällä kertoo että kaikki OK. Jos se palaa punaisena, se kertoo että moduulia ei ole liitetty AVR:n ISP-liitäntään tai liitännässä on oikosulku tai jotain muuta vikaa.

Lohkokaavio kaiken olennaisen.

Page 18: 0.3. AVRStudio_ ohjelman_tekeminen

18

Target-kaapelin pinnijärjestys.

PV-M644-kortissa on 6-pinninen liitin ohjelmointia varten.

Kuvassa keskellä 6-pinninen ohjelmointiliitäntä. Tai voit ohjelmoida AVRISP mkII-moduulilla myös PV-M322-kortilla olevan 10-pinnisen stk200-tyyppisen liitännän kautta käyttämällä väliadapteria.

Tähän tulee parempi kuva

Page 19: 0.3. AVRStudio_ ohjelman_tekeminen

19

Valitse ja käynnistä AVR Programmer: Valitse AVRStudion alasvetovalikosta Tools, Program AVR, Connect… tai

käytä painonappeja - vasen avaa ohjelman valintaikkunan, - keskimmäinen avaa itse ohjelmointiohjelman ja - oikeanpuoleinen työntää käännetyn *.hex-koodin suoraan kortille (kun em. asetukset OK)

Valitse AVRISP mkII ja USB. Paina Connect.

Page 20: 0.3. AVRStudio_ ohjelman_tekeminen

20

Avautuu seuraavanlainen ikkuna.

Valitse main-välilehti. Tarkista yhteys painamalla Read Signature-nappia. Jos ok, ohjelma lukee Atmega644-ohjaimen Signaturen ja tulostaa sen kuten kuva osoittaa. ISP Frequencyn tulee olla max ¼ MCU:n kellotaajuudesta. Määritä, jotta ISP toimii kunnolla.

Page 21: 0.3. AVRStudio_ ohjelman_tekeminen

21

Valitse Program-välitehti. Varmistu että kruksit ovat kuvan mukaisesti. Etsi projektikansiosta Flash-ikkunaan Input Hex File-ruutuun siirrettävä *.hex-koodi. Paina Program-nappia. Koodi siirtyy parissa sekunnissa PC-koneesta AVR:n ohjelmamuistiin ja PV-M644-kortin B-portissa olevat ledit alkavat vilkkua ohjelman tahdissa. Muuta koodia (viive-aikaa ja porttiin kirjoitettavia lukuja), käännä ja lataa koodi AVR:ään. Tarkastele lopputulosta. ”Ulkoinen” makefile Kun lähetään tai julkaistaan koodia muitten käyttöön, on tapana liittää lähdekoodin mukaan makefile-tiedosto, jossa on c-kääntimelle ohjeet miten koodi käännetään oikein.. Tässä ohje miten käytetään ulkoista makefile-tiedostoa. - TULOSSA

Page 22: 0.3. AVRStudio_ ohjelman_tekeminen

22

Luodaan makefile Mfile-generaattorilla Mfile-generaattorilla tehdään helposti toimiva makefile. Sellainen, joka osaa tehdä myös AVRStudio-simulaattori/emulaattoriin kelpaavan *.elf-tiedoston. Se on tiedostomuoto, joka sisältää debuggauksessa tarvittavaa informaatiota.

Käynnistä Mfile-generaattori klikkaamalla työpöydällä olevaa ikonia. Se syntyi WinAVR-asennuksen yhteydessä. Mfile-ikkuna aukeaa. Siinä on valmiina muokattava mallipohja, template.

Valitse Makefile-alasvetovalikosta kaikki rivit vuoronperään ja muuta asetuksia vain jos on aihetta. Oikeastaan ei tarvitse muuttaa kuin MCU type eli käytössä olevan AVR-mikro-ohjaimen tyyppi. Kaikki muu on oletuksena ja valmiina oikein (ellet halua määrittää ohjelmointiympäristöä, jota en suosittele). Kun työ on tehty, avaa File-alasvetovalikko ja talleta uusittu makefile samaan kansioon, missä on käännettävä lähdekoodi, siis tässä tapauksessa demo-kansio. Avaa makefile. Makefilen kellotaajuutta ei voi generaattorilla muuttaa, joten muuta se # Processor frequency. F_CPU = 4000000

Myös käännettävän koodin nimi on makefilessä oltava oikein. Kirjoita aina uusi käännettävän koodin nimi ennen kääntämistä. Siis tässä demo ja aina, ehdottomasti ilman tiedostotarkenninta. Kaikki muu entisellään

Page 23: 0.3. AVRStudio_ ohjelman_tekeminen

23

Sitten konfiguroidaan ulkoinen makefile käyttöön samoin kuin edellä opittiin. Tässä tietenkin käytetään demo-kansiossa olevaa makefilettä.

Nyt on aika kirjoittaa editorissa jokin simppeli ledin vilkutus koodi ja talleta se. Kutsu käännintä, Build, ja lataa käännöstulos kortille.