PIC: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
Ervion (arutelu | kaastöö)
P Positsioonist sõltumatu koodi täpsustus
PResümee puudub
2. rida:
{{See artikkel|räägib mikrokontrollerite perekonnast; kompileerimise meetodi kohta vaata [[Positsioonist sõltumatu kood]]}}
[[Image:Microchip PIC24HJ32GP202.jpg|thumb|16-bitine PIC24 mikrokontroller joonlaua kõrval]]
'''PIC''' on RISC tüüpi käsustikuga mikrokontroller, mida arendab firma Microchip Technology. Tänapäeval mõistetakse lühendi all tavaliselt ingliskeelset fraasinimetust "Peripheral Interface Controller", kuid algselt tähendas see "Programmable Interface Controller" ning vahepeal ka "Programmable Intelligent Computer". Esimene PIC mudel oli tegelikult PIC1650<ref name="PICmicrofamilytree" />, mille töötas välja firma General Instruments. Osakond, mis selle välja arendas, eraldus aga hiljem ning sai iseseisvaks firmaks nimega Microchip Technology.
 
PIC on tänapäeval laialt kasutuses nii tööstustoodetes kui ka hobi korras mikrokontrolleritega tegelevate inimeste poolt. Põhjuseks on madal hind, suur kasutaja arv ja palju arendustööriistu, millega lihtsalt PIC arhitektuurile tarkvara saab luua.
10. rida:
PIC on Harvardi arhitektuuriga mikrokontroller, mis tähendab, et kood ja andmed on eraldatud erinevatesse mäludesse. Ainsaks erandiks on 32-bitised PIC mikrokontrollerid, kus kood ja andmed on samas mälus ning mis kasutavad Von Neumanni arhitektuuri. Kuna PIC on RISC tüüpi käsustikuga, siis üksikud käsud teevad korraga vähe muutusi. Seetõttu on sellel kõikide käskude suurus baitides alati sama ning suurema osa käskude täitmiseks kulub enamasti üks tsükkel, välja arvatud käskude puhul, mis muudavad järgmise tõlgendatava käsu asukohta, näiteks hüppekäskude puhul.
 
PIC kasutab ühte vaheregistrit W0, mis osaleb väga paljudes erinevates käskudes automaatselt ning mida ei saa asendada käsus teise registriga. Kõik RAM piirkonnad on tegelikult nagu registrid, mida saab kasutada käskudes nii sisendi kui väljundi jaoks. Isegi riistvara kontrollimise registrid on paigutatud andmemälu piirkonda. Varasematel PIC'i versioonidel sai andmepiirkonnast korraga adresseerida ainult väikest osa ehk 256 baiti. Erinevate 256 baidi suuruste mälupiirkondade vahel vahetamiseks pidi muutma spetsiaalset staatuse registrit.
 
PIC'i pinu, kus hoitakse funktsioonide väljakutsumisahela talletamiseks tagasipöördumisaadresse, on riistvaraline ning asub eraldi andmemälust. Kuna PIC seeriani 18 ei olnud võimalik käskudega riistvaralist pinu otse muuta ega lugeda, kuid alates seeriast 18 on see võimalik.,
 
Kõik PIC mikrokontollerid käsitlevad ja adresseerivad andmeid 8-bitiste tükkidena. Koodimälus ei pruugi aga sama olukord olla, kuna erinevatel seeriatel on ühe käsu suurus bittides erinev, näiteks leidub 12-bitiste ja 14-bitiste käskudega mudeleid. PIC18 seerias on ühe käsu suurus 16 bitti.
 
PIC-del on riistvaraline pinu, milles hoitakse tagasipöördumisaadresse. Riistvaraline pinu ei ole varasematel PIC seadmetel tarkvaraliselt kättesaadav, kui 18 seeria seadmetel on selle jaoks võimalused olemas. RiistavaralineRiistvaraline tugi parameetrite talletamiseks pinus puudus varasemates seeriates, kuid seerias 18 on seda parandatud, mistõttu 18 seeria sobib paremini kõrge astme kompilaatorite jaoks kui varasemad seeriad.
 
===Andmemälu===
 
Andmemälu ja registrite mälu on PIC'i puhul sünonüümid. Isegi spetsiaalse eesmärgiga registrid on paigutatud andmepiirkonda. Mälu adresseerimise viis oleneb PIC'i seeriast. Varasematel oli mälu jagatud 256 baidi suurusteks piirkondadeks, mille vahel vahetamiseks pidi muutma ühe registri väärtust. Ainuke register, mis ei asu tavaliselt põhimälus, on vaheregister W, mille abil on seega võimalik liigutada andmeid ühest adresseerimispiirkonnast teise. Hilisemates seeriates lisati käsud, millega sai liigutada andmeid otse ühest piirkonnast teise.
 
Isegi erinevate mälupiirkondade kasutamisel oli mälu hulk väga piiratud. PIC16 seeria puhul oli staatuse registris piirkonna määramiseks vaid 2 bitti, mis tähendab, et see toetas ainult kuni nelja piirkonda, mis tähendas, et maksimaalselt sai kasutada ainult 1 kilobaiti mälu.
30. rida:
===Koodimälu===
 
Koodimälu on tavaliselt realiseeritud kui ROM-, EPROM-, EEPROM- või flash -ROM -mäluna. ROM -mälu puhul ei olnud koodimälu vajadusel võimalik üle kirjutada ning ei sobinud seega arenduskomplektide jaoks. EPROM küll parandas olukorda, kuid mälu ülekirjutamine oli siiski tülikas, kuna selleks pidi eelnevalt rakendama UV -kiirgust. Alles EEPROM võimaldas elektriliselt andmeid kustutada. Tänapäeval on väga palju kasutusel aga just flash -ROM.
 
8-bitistel PIC mikrokontrolleritel on koodimälu võimalik otse adresseerida ainult PIC17 ja mõnedel PIC18 mudelitel. Hilisematel on see juba võimalik ning 32-bitistel asub koodimälu juba andmemäluga koos.
36. rida:
===Käsustik===
 
PIC-de käsustiku suurus varieerub sõltuvalt PIC mudelist 35 käsust 80 käsuni. Käsustik sisaldab käske registrite peal operatsioonide tegemiseks, vaheregistrite (ingl. k. accumulator) kasutamiseks ning programmi võrdluste ja nende tulemuste põhjal koodis hüpete tegemiseks.
 
Mõnda käsku, näiteks bittide muutmist ja testimist, saab teha suvalise adresseeritava registri peal, kuid mitme parameetriga käsud kasutavad alati vaheregistrit W, kus W on alati kas sisendiks, väljundiks või mõlemaks. W (mõnel seerial on mitu W registrit) on ainus register, mis ei asu seadme põhimälus. W registrisse peab näiteks sisestama kõik konstandid, enne kui neid saab teistesse registritesse ümber tõsta.
61. rida:
1992. aastaks oli müügil juba kuus PIC varianti. Neli neist olid 12-bitiste käskudega, seeriast PIC16C5x. Müügil oli ka üks 14-bitiste käskudega mikrokontroller PIC16C71. See oli esimene mudel, mis sisaldas analoog-digitaalmuundurit ja võimalust kasutada katkestusi. Veel oli neil müügil üks 16-bitiste käskudega PIC17 seeria mudel PIC17C42, kuid kuna PIC17 seeria erines oluliselt varasematest, siis väga paljud ei läinudki PIC16 pealt üle PIC17 peale.
 
Põhiliselt müüdi küll ühekordselt kirjutatavaid PIC mudeleid, kuid müügiedu kasvatas väga oluliselt just see, et Microchip tõi müügile EEPROM -mäluga versiooni PIC16C84. Elektriliselt kustutatav mälu tegi arendajate töö palju lihtsamaks ja PIC kogus veelgi populaarsust, sest nüüd oli võimalik mikrokontrollerit lahti ühendamata koodimälu üle kirjutada.
 
Kuna tekkis vajadus 16-bitiste käskudega seeria järele ning PIC17 ei olnud eriti edukas, arendas Microchip välja uue seeria PIC18, mida nad tutvustasid aastal 2001. PIC18 seeria oli üles ehitatud nii, et PIC16 pealt üleminek oleks võimalikult lihtne ning see seeria osutus selle võrra edukamaks.
67. rida:
Varsti hakkas Microchip välja arendama ka reaalselt 16-bitiseid mikrokontrollereid. Sellised seeriad olid PIC24 ja dsPIC, kus tegelikult käskude pikkus oli 24 bitti. Kuigi erinevus eelmistest seeriatest oli väga suur, kuna 8-bitistelt mikrokontrolleritelt mindi üle 16-bitistele, üritas Microchip teha uued seeriad väliselt sarnase ehitusega.
 
2007. aastal tuli Microchip välja ka 32-bitiste PIC mikrokontrolleritega, mis suurendasid oluliselt taktsagedust, maksimaalset mälu suurust ning mille peal oli võimalik jooksutada koodi RAM -mälust.
 
==Arendustarkvara==
73. rida:
Microchip Technology pakub vabavaralist tarkvarakomplekti MPLAB, mis sisaldab tööriistu PIC peale tarkvara arendamiseks. Komplekt sisaldab assemblerit, linkerit, emulaatorit ja silurit. C kompilaator, mida Microchip PIC seadmetele pakub ning mis sobib kasutamiseks MPLAB komplektiga, on aga tasuline, kuigi on olemas katseversioon, mis töötab 60 päeva samamoodi kui tasuline, seejärel aga keeratakse kinni mõned koodi optimeerimised. Microchip pakub MPLAB kaubamärgi all kompilaatoreid seeriatele PIC18, PIC24, PIC32 ja dsPIC.
 
C kompilaatoreid PIC'i jaoks pakkus ka firma Hi-Tech Software, mis aga osteti Microchip Technology poolt 2009. aastal. Nüüdsest on Microchip kodulehel müügiks ka Hi-Tech poolt loodud kompilaatorid, mis katavad ära seeriad PIC10, PIC12, PIC16 ja PIC18.
 
Praegu ainus täielikult vabavaraline C kompilaator PIC mikrokontrollerite jaoks on SDCC, mis toetab mitut PIC seeriat. SDCC kasutab GPL litsentsi, seega on avatud lähtekoodiga.
93. rida:
==Eelised ja puudused==
 
PIC arhitektuuri on tihti väga mugav kasutusele võtta selle lihtsuse tõttu. Seesama omadus aga tekitab piiranguid, mis mõneks otstarbeks PIC'i kasutamise ka keerulisemaks teevad. Peamised PIC'i eelised on järgmised:
 
* Käsustik on suhteliselt väike ja koosneb lihtsatest käskudest (RISC arhitektuur).
101. rida:
* On loodud palju liideseid, mille kaudu saab mikrokontrolleriga suhelda.
 
Kõige olulisemad piirangud PIC'i puhul on järgmised:
 
* Paljudel seeriatel on ainult üks vaheregister.
* Erinevate mälupiirkondade kasutamiseks tuleb nende vahel vahetada spetsiaalse registri väärtuse muutmise kaudu.
* Paljud käsud töötavad ainult kindlat tüüpi sisendi ja väljundiga. Mõned töötavad ainult konstantitegakonstantidega, mõned registritega ja mõned vaheregistriga, aga üldiselt mitte kõigi nendega.
 
PIC18 seeria on mõningate varasematel seeriatel leiduvate piirangutega seoses teinud muutusi. Näiteks on riistvaraline pinu adresseeritav. Samuti on PIC18 seeria mikrokontrolleritel lihtsam luua ka tarkvaraline pinu, mis annab arendajale veelgi suurema kontrolli seadme üle. Seega on selle seeria peal juba teoreetiliselt võimalik vahetada mitme tegumi vahel.
Pärit leheküljelt "https://et.wikipedia.org/wiki/PIC"