C-PROGRAMIRANJE ARM9 MIKROKRMILNIKOV V PROSTO DOSTOPNEM RAZVOJNEM OKOLJU ZA LINUX

Size: px
Start display at page:

Download "C-PROGRAMIRANJE ARM9 MIKROKRMILNIKOV V PROSTO DOSTOPNEM RAZVOJNEM OKOLJU ZA LINUX"

Transcription

1 UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA FAKULTETA ZA MATEMATIKO IN FIZIKO Študijski program: Fizika in tehnika C-PROGRAMIRANJE ARM9 MIKROKRMILNIKOV V PROSTO DOSTOPNEM RAZVOJNEM OKOLJU ZA LINUX DIPLOMSKO DELO Mentor: izr. prof. dr. Slavko Kocijančič Kandidat: Žiga Lausegger Ljubljana, december 2013

2

3 Zahvala Rad bi se zahvalil materi Ani za podporo in potrpljenje; svojemu dekletu Ranji in njeni mami Romani za motivacijo; Viliju in Mini, ki sta me potolažila, ko sem potreboval tolažbo; bratoma Anžetu in Roku ter sestrici Špeli za dobrodošlico v našem domu, ko sem jo potreboval. Posebej bi se rad zahvalil mentorju dr. Slavku Kocijančiču za motivacijo in sredstva, ki jih je namenil za nakup potrebne opreme; poklicnemu programerju Igorju, ki mi je pokazal trnjevo pot skozi razhroščevanje; programerjema Ediju in Borutu za usmeritev in prikaz problemov pri izbiri mikrokrmilnika; spletnemu forumu Elektronik.si za potrpljenje z menoj, ko sem spraševal začetniška vprašanja; podjetju Embeded Artists za dovoljenje pri objavi sheme razširitvenih konektorjev; spletnemu forumu StackOverflow - tako podrobne in profesionalne pomoči pri interpretaciji izvorne kode nisem našel nikjer drugje; spletnemu forumu TexOverflow za profesionalno pomoč pri pisanju diplomskega dela v formatu L A TEX; spletnemu forumu Ubuntu forums za pomoč z Linux ukazno vrstico; celotni odprtokodni skupnosti, da omogočajo tako lep vpogled v izvorno kodo, skozi katero smo se jaz in mnogo drugih veliko naučili. Hvala.

4

5 Povzetek Trenutno so v tehniško izobraževanje vključeni starejši mikrokrmilniki, katerim se posveča malo pozornosti. To je eden izmed vzrokov za slabo poznavanje mikrokrmilnikov med študenti in učitelji, kar je razvidno iz rezultatov anketnega vprašalnika. Da bi izboljšali stanje na področju izobraževanja, je v prvem delu diplome teoretično razložen skrbno izbrani mikrokrmilnik LPC3141 in njegov mikroprocesor ARM926ej-s. Opisani so način delovanja, ključni registri ter ključni biti. V praktičnem delu je bralec seznanjen s prosto dostopnim operacijskim sistemom Linux, za katerega je opisana celotna namestitev. Sledi opis namestitve in razlaga odprtokodnih programerskih orodij GCC, ki skupaj z operacijskim sistemom Linux ne predstavljajo nobenega stroška. V trenutni gospodarski krizi to pride še kako prav. V nadaljevanju najprej sledijo enostavni in nato bolj zapleteni projekti, zaradi česar sta prikazani namestitev in uporaba odprtokodnega integriranega razvojnega okolja Eclipse. Slednjega uporabljamo za pisanje C-projektov vse do konca diplomskega dela. V zaključku je predstavljenih nekaj iztočnic za potencialno doktorsko nalogo. Ključne besede: ARM9, LPC3141, Linux, GCC, Eclipse, C-programski jezik, make, ARM zbirnik, tehniško izobraževanje

6 Abstract At the moment, there are older microcontrollers used in technology education and they receive little attention. Questionnaire results showed this could be one of the reasons for bad understanding of microcontrollers among students and teachers of technology profession. In desire to improve the current state, dissertation firstly gives theoretical explanation on carefully chosen microcontroller LPC3141 and its microprocessor ARM926ej-s. Moreover, dissertation describes ways LPC3141 can function, its key registers and key bits. Secondly, practical part gives some knowledge on Linux open source operating system and describes its installing procedure. Theoretical explanation and installation procedures of GCC open source programming tools are explained next. GCC used in combination with Linux represents no costs at all which might come handy in the current economic crisis. Additionally, simple and advanced projects are presented because of which describing installation procedures and usefulness of Eclipse open source integrated developement environment is required. Eclipse is being used for writing C-projects until the end of dissertation. In conclusion, some directions for future PhD thesis are presented. Key words: ARM9, LPC3141, Linux, GCC, Eclipse, C-programming language, make, ARM assembly, technology education

7 Kazalo vsebine 1 Akronimi 9 2 Uvod 12 3 Vgrajeni sistemi Mikrokrmilniki Izkušnje z mikrokrmilniki in želje Iskanje primernega mikrokrmilnika Mikrokrmilnik LPC Zagonski postopek CGU Vhodno/izhodni konfiguracijski modul PWM modul Mikroprocesor ARM926ej-s ARM registri Register cpsr ARM sklad in kazalček sklada sp Programski števec pc Povratni register lr Koprocesorski register p Linux Distribucija Xubuntu Namestitev Xubuntu Postavitev razvojnega okolja Postavitev in uporaba razvojne verige v CLI Izbira in snemavanje razvojne verige

8 5.1.2 Namestitev razvojne verige Prevajanje in povezovanje enostavnega projekta Priprava in nalaganje izvršljive datoteke na mikrokrmilnik preko USB Makefile ARM zbirnik in zagonska koda Povezovalna skripta Postavitev in uporaba razvojne verige v IDE Izbira IDE Namestitev IDE Eclipse Makefile projekt v IDE Eclipse Pisanje C-izvornih datotek Digitalni izhodi Digitalni vhodi PWM Delilniki Diskusija 72 8 Zaključek 73 Literatura 76 Priloga A Razporeditev pinov na LPC Priloga B Razširitveni konektorji na EA3141 ter povezave s prototipno ploščico 79 Priloga C Anketni vprašalnik 81 Seznam slik 86 Seznam tabel 87 Seznam datotek 88 8

9 1 Akronimi MCU Micro Controler Unit - Majhen čip, ki vsebuje podobne sestavine kot PC. Zaradi svoje majhne velikosti je nenadgradljiv. PC Personal Computer - Osebni računalnik. IDE Integrated Development Environment - Razvojno okolje z integriranimi prevajalniki, razhroščevalniki, zagonskimi datotekami in funkcijami namenjenim določenemu MCU ali družini MCU. OS Operating System - Operacijski sistem oz. skupek programov, ki omogoča učinkovito uporabo strojne opreme na uporabniku prijazen način. Predstavniki so Linux, Windows, MacOS, Android... GNU GNU is Not Unix GPL General Public Licence - Javno lastniška licenca, ki programsko opremo opredeli kot družbeno lastnino, katero je prepovedano tržiti. Vsakemu omogoča vpogled in spreminjanje programske opreme, ki ob predelavi prevzame isto licenco. USB Universal Serial Bus - Univerzalno serijsko vodilo. LCD Liquid Crystal Display - Zaslon na tekoče kristale vgrajen v novejše televizije, monitorje, telefone, dlančnike... MCPU Micro Central Processing Unit - Centralno procesna enota v obliki čipa vgrajenega v MCU. ADC Analog to Digital Converter - Vezje oz. čip, ki na vhodih MCU pretvori električni tok ali napetost v digitalno število sorazmerno električnemu toku ali napetosti. DAC Digital to Analog Converter - Vezje oz. čip, ki na izhodih digitalnemu številu dodeli sorazmerno električno napetost ali tok. PWM Pulse Width Modulation - Pulzno širinska modulacija signala, kjer je pomembno razmerje med časom trajanja visokega in nizkega stanja, medtem ko je njuna vsota oz. perioda konstantna. GPIO General Purpose Input Output - Splošno namenski vhodi izhodi izmed katerih imajo nekateri posebno vlogo. RAM Random Acess Memmory - Delovni pomnilnik. UART Universal Asinchronous Reciever Transmitter - Univerzalni asinhronski sprejemnik oddajnik, ki prevaja podatke med paralelnimi in serijskimi vodili. SPI Serial Peripheral Interface - Serijski periferni vmesnik. Štirižično podatkovno vodilo, ki vsebuje enega mojstra in več sužnjev. Mojster sužnjem določi sistemsko uro, izbira tiste, ki jih potrebuje, pošilja ukaze in sprejema odgovore. OTG On The Go - Novejša različica USB protokola, kjer se namesto 4 nožic uporablja 5 nožic, katere najdemo v USB tipih mini-a, mini-b, mikro-b in mikro-ab. Dodatna nožica je povezana z MCU in omogoča, da naprava priključena na USB prevzame vlogo strežnika. ISRAM Internal Static RAM - Notranji statični RAM. ISROM Internal Static Read Only Memmory - Notranji statični bralni pomnilnik iz katerega lahko beremo, vanj pa ne moremo pisati. NAND FLASH Not AND FLASH memmory - Ne in izvedba hitrega FLASH pomnilnika v katerega lahko pišemo ali iz njega brišemo s pomočjo električnega toka in napetosti. 9

10 DMA Direct Memmory Acess - Nadzorna enota, ki nadzira neposreden dostop do pomnilnika. MPMC Multi-Port Memmory Controller - Pomnilniška nadzorna enota z večimi vhodi. MCI Memmory Card Interface - Vmesnik za spominske kartice. I2C Inter-Integrated Circuit - Dvožično podatkovno vodilo, namenjeno komunikaciji enega mojstra z večimi sužnji pri nizki hitrosti prenosa podatkov. I2S Integrated Interchip for Sound - Izvedba I2C namenjena prenosu zvoka. JTAG Joint Test Action Group - Vmesnik oz. programator za direktno programiranje. RNG Random Number Generator - Komponenta za kreiranje naključnih števil. CGU Clock Generation Unit - Periferija za dinamično spreminjanje velikosti sistemske ure, ki omogoča preusmeritev sistemske ure na periferije. PCM Pulse Code Modulation - Pulzno kodna modulacija je metoda za digitalno predstavitev obdelanega analognega signala. WDT Watch-Dog Timer - Števec v vlogi čuvaja, ki ob neprejemanju pulzov resetira in s tem ponovno vzpostavi MCU. Neprejeti pulz lahko pomeni nekontrolirano in s tem nevarno izvajanje programa. AHB Advanced High-performance Bus - Napredna visoko zmogljiva matrika, ki predstavlja vezni člen med mojstri in sužnji. APB Advanced Peripheral Bus - Napredna matrika, ki povezuje posamezne periferije oz. module znotraj domene oz. suženjske skupine. I-cache Instruction-cache - Hitri spomin po katerem se prenašajo ukazi. Nahaja se med MCPU in glavnim pomnilnikom in s tem izboljša prenos podatkov. D-cache Data-cache - Hitri spomin po katerem se prenašajo podatki. Nahaja se med MCPU in glavnim pomnilnikom in s tem izboljša prenos podatkov. USB DFU USB Device Firmware Update - Protokol za posodabljanje MCU programov preko USB vodila. MMU Memmory Management Unit - Vmesnik med MCPU in pomnilnikom, ki od MCPU sprejema virtualne naslove, ki niso vedno znotraj pomnilnika, in jih pretvori v fizične naslove znotraj pomnilnika. CRC Cyclic Redundancy Check - Koda za odkrivanje naključno nastalih napak. TEA Tiny Encription Algorythm - Majhen a hiter enkripcijski algoritem, ki zakrije program tako, da je le ta neprepoznaven in s tem zaščiten. PLL Phase-Locked Loop - Vezje, ki poizkuša preko povratne zanke sinhronizirati vhodno in izhodno frekvenco. IOCONFIG In and Out CONFIGuration module - Modul namenjen konfiguraciji GPIO. BGA Ball Grid Array - Razporeditev nožic MCU v obliki matrike, ki se nahaja na spodnji strani MCU. PDM Pulse Density Modulation - Modulacija signala, kjer amplitudo določa relativna gostota pulzov. DC Direct Current - Enosmerni tok. ISA Instruction Set Architecture - Nazaj združljiv nabor ukazov, ki jih podpira MCU. EDA Electronic Design Automation - Programska oprema za načrtovanje elektronskih shem ali tiskanih vezij. RISC Reduced Instruction Set Computer - Računalnik z zmanjšanim naborom ukazov, ki je posledično hitrejši in cenejši. ALU Arithmetic Logic Unit - Aritmetično logična enota, ki izvaja aritmetično logične operacije med vrednostima shranjenima v dveh ločenih registrih. MAC Multiplay ACcumulator - Množilno prištevalna enota, ki zmnoži vrednosti v dveh ločenih registrih in produkt prišteje poljubnemu registru. cpsr Current Program Status Register - Trenutni programski statusni register. 10

11 pc Program Counter - Programski števec. sp Stack Pointer - Kazalček sklada. lr Link Register - Povratni register. spsr Saved Program Status Register - Shranjevalni programski statusni register. p15 coprocessor register 15 - Koprocesorski register 15. TLB Translation Lookaround Buffer - Prevajalni razgledni prenosnik je hitri pomnilnik znotraj MMU, ki ureja tabelo virtualnih naslovov. CLI Command Line Interface - Ukazni uporabniški vmesnik, kjer upravljanje računalnika poteka preko ukazov v tekstovni obliki. GUI Graphical User Interface - Grafični uporabniški vmesnik, ki omogoča uporabo miške, manipulacijo z okni, klikanje na gumbe... BIOS Basic In and Out System - Osnovni vhodno in izhodni sistem, ki se zažene takoj po zagonu PC in pred zagonom OS. GCC GNU Compiler Collection - Zbirka razvojnih programerskih orodij za OS Linux, zaščitena z licenco GNU GPL. EABI Embedded Application Binary Interface - Primitivni dvojiški vmesnik med kakršnim koli programom in OS. APCS ARM Procedural Call Standard - ARM proceduralni klicni standard. DWARF Debugging With Attribute Record Format - Razhroščevanje s formatom, ki podpira shranjevanje atributov. ELF Executable and Linkable Format - Format izvršljive datoteke, ki omogoča enostavno dodajanje novih objektnih datotek. EBN Embedded Binary Numbers - Format, katerega podjetje NXP uporablja za posodabljanje strojne opreme. bash Bourne-Again SHell - Linux lupina, ki omogoča vnos CLI ukazov. Njen avtor je Steve Bourne, po katerem lupina delno nosi svoje ime. CDL Common Driver Library - Zbirka pogosto uporabljenih gonilnikov. DACR Domain Access Control Register - Register za nadzor dostopa do domen. 11

12 2 Uvod Mikrokrmilniki (MCU), za programiranje katerih potrebujemo integrirano razvojno okolje (IDE), se hitro razvijajo, zaradi česar je potrebno nenehno posodabljanje IDE. Cena IDE je odvisna od licence in od podprtih MCU. IDE, ki podpira najnovejše MCU, lahko stane med 400 in 3000 [1], kar je v času gospodarske krize nezanemarljiv strošek. Slednjemu je zaradi težnje po stalnem posodabljanju tehnologije izpostavljena celotna tehniška stroka. Če se želimo učiti programirati določeni MCU, je priporočeno kupiti vgrajeni sistem 1. Cene teh so odvisne od starosti in zmogljivosti podprtega MCU. Novejši vgrajeni sistemi lahko stanejo med 60 in 500 [2, 3], kar skupaj z IDE predstavlja velik strošek. Če slednjega pomnožimo s številom osebnih računalnikov (PC) v učilnicah, dobimo visok znesek. Dodatni strošek predstavlja operacijski sistem (OS) Windows. OS v desetletju zastara in ga je potrebno menjati. Omenjeno se pravkar dogaja z OS Windows XP, ki je izšel leta Menjavo spodbuja podjetje Microsoft, ki po desetletju ukine celotno tehnično podporo in uporabniki so prisiljeni kupiti nov OS [4]. Cena novejših Microsoftovih OS se giblje med 100 in 300 [5], kar je strošek za šolo in starše šoloobveznih otrok. Slovenske šole vztrajajo pri uporabi OS Windows, ki ga učenci spoznajo v osnovni šoli in se ga učijo od tedaj naprej. Šola zahteva pisanje dokumentov v formatih, podprtih izključno na OS Windows. Za branje in pisanje teh formatov potrebujemo program, kot npr. Microsoft Word, ki je del paketa Microsoft Office. Cena slednjega je med 100 in 600 [6]. Zaradi visokih cen omenjene programske opreme je ta nekaterim staršem šoloobveznih otrok nedosegljiva in s tem je kršeno pravilo enakih možnosti [7, str. 55]. Da bi si zagotovili enake možnosti, nekateri posegajo po piratski programski opremi, zaradi katere lahko končajo v zaporu, saj je bil sprejet predlog spremembe kazenskega zakonika [8], ki predlaga zaporno kazen za prekomerno snemavanje piratske spletne vsebine. Potrebno se je vprašati, ali je še moralno od učencev zahtevati uporabo omenjene lastniške programske opreme. Bi bilo bolje ponuditi prosto dostopno alternativo, ki bi odpravila tudi stroške nadgradnje? Ponujena prosto dostopna alternativa, ki reši nekaj zgoraj naštetih problemov, je OS Linux. Prosto dostopna zasnova Linuxa uporabnikom omogoča vpogled in spreminjanje programov, katere ščiti GNU GPL licenca. Slednja nam omogoči predelavo odprtokodnih IDE za programiranje najnovejših MCU, kar odpravi strošek nakupa profesionalnega IDE. Ker veliko IDE že podpira OS Linux, ni potrebno kupovati lastniškega OS, s čimer šoloobveznim otrokom omogočimo enake možnosti. Diplomsko delo prikazuje, kako na OS Xubuntu postavimo razvojno okolje, ki nam omogoča programiranje najnovejših ARM mikroprocesorjev (MCPU), ki se nahajajo že praktično v vseh elektronskih napravah in so po zmogljivosti konkurenčni nekdanjim enojedrnim izvedbam PC [9]. 1 Angleško tudi embedded system. Predstavlja okoli MCU zgrajene elektronske komponente, ki omogočajo programiranje, testiranje, povezljivost z drugimi elektronskimi napravami, pridobivanje in pošiljanje podatkov... 12

13 V začetnem delu diplomskega dela so predstavljene izkušnje z MCU ter na podlagi teh postavljeni kriteriji, po katerih je izbran nov MCU, imenovan LPC3141. Slednji je najprej podrobno teoretično opisan, saj programiranje v praktičnem delu ni mogoče brez poznavanja LPC3141. Ker začetno programiranje poteka na zelo nizkem nivoju, je potrebno znanje ARM zbirnika, ki je v grobem predstavljen skozi praktični del. ARM zbirnik je dokaj zahteven, zaradi česar je proti koncu diplomskega dela prikazan prehod na programiranje v visokem programskem jeziku C, ki je večini lažje razumljiv. Prehod je opravljen postopno z izčrpno razlago podrobnosti. 13

14 3 Vgrajeni sistemi Vgrajeni sistemi, slika 3.1(a), so skupek MCU, ki je osrednja komponenta, in okoli MCU zbranih elektronskih komponent imenovanih, tudi periferne naprave. To so vse elektronske komponente, ki poskrbijo za: ustrezno napajanje MCU in ostalih elektronskih komponent, komunikacijo MCU z ostalimi komponentami ali s PC preko različnih protokolov 2, komunikacijo ene komponente z drugo, prikazovanje informacije v človeku razumljivi obliki, kot to počne npr. LCD, slika 3.1(b), in shranjevanje informacije v zunanjih spominskih komponentah. (a) (b) Slika 3.1: (a)vgrajeni sistem in (b) periferna naprava z LCD prikazovalnikom. Majhna velikost vgrajenih sistemov je prednost, ki se izkaže pri mobilnih napravah, kot so npr. mobilni telefoni, mobilni roboti, prenosni merilniki... Zaradi majhne velikosti imajo vgrajeni sistemi majhno porabo električne energije. Slabost vgrajenih sistemov je omejena zmogljivost, saj v prostorsko omejeni sistem težko vgradimo dodatne komponente. Kljub temu je na področju robotike in elektronike izbira vgrajenih sistemov logična rešitev, saj je enostavnejša gradnja mobilnega robota, ki v svojem ohišju nosi vgrajen sistem, kot pa povezava mobilnega robota s PC. Eden izmed razlogov, ki vpliva na tako odločitev, je omejen domet brezžične povezave. Dobro je vedeti, da je že razvit MCPU z večjedrno zasnovo, ki po zmogljivosti konkurira nekdanjim enojedrnim izvedbam procesorjev, v PC [9]. To dejstvo dodatno utemelji izbiro vgrajenih sistemov na omenjenih področjih. 2 Standardizirana zbirka pravil, ki narekuje, kako mora potovati informacija. Večini poznan protokol je npr. USB. 14

15 3.1 Mikrokrmilniki MCU, slika 3.2, je osrednji del vgrajenih sistemov. Je skupek osrednje enote MCPU in obdajajoče periferije, ki se nahaja znotraj MCU. Pojem periferija ni enak pojmu periferna naprava, saj se slednja nahaja izven MCU. Periferija znotraj MCU opravlja iste naloge, kot periferne naprave na vgrajenih sistemih, poglavje 3. Slika 3.2: Primeri MCU Izkušnje z mikrokrmilniki in želje Moje izkušnje na področju MCU izhajajo iz programiranja 8-bitnega 3 MCU ATMEGA16 podjetja Atmel [10]. Hiba ATMEGA16 je v 8-bitni arhitekturi, ki je počasna v primerjavi z novejšimi 32-bitnimi MCU. Omenjena hiba skupaj z nizko frekvenco 4 MCPU, ki znaša 16 MHz, ne zadošča natančnemu merjenju ultrazvoka. V robotiki je ultrazvok zelo uporaben, saj omogoča natančno merjenje časa med oddanim in sprejetim signalom. Na podlagi izmerjenega časa računamo oddaljenost predmeta in njegovo hitrost. Frekvence ultrazvoka se gibljejo med 20 khz in 200 MHz. Z uporabo višje frekvence ultrazvoka dosežemo večjo natančnost meritev. Če izračunamo kvocient k frekvence MCPU ATMEGA16 ν MCP U = 16 MHz in frekvenc ultrazvoka ν uz =[20 khz, 200 MHz], dobimo krivuljo, slika 3.3, ki prikazuje hitro padanje k z naraščajočo ν uz. V najboljšem primeru, ko je ν uz =20 khz, je kvocient enak k =800 in MCPU nima težav s procesiranjem vhodnih podatkov. Pri frekvenci ν uz = ν MCP U = 16 MHz je kvocient k = 1 in MCPU sprocesira 100 % vhodnih podatkov. Če se ν uz zmanjšuje naprej, velja k < 1 in MCPU ne uspe sprocesirati vseh vhodnih podatkov. Pri ν uz = 200 MHz je k 0 in merjenje ultrazvoka je brezpomensko. Pojavi se potreba po frekvenci MCPU, višji od 200 MHz, s katero bi dosegli k 1. Tako bi MCPU tudi pri najvišjih frekvencah ultrazvoka sprocesiral 100 % vhodnih podatkov. Ker moramo veliko količino vhodnih podatkov sproti shranjevati, se pojavi potreba po hitrem in velikem notranjem pomnilniku, npr. RAM. Počasno shranjevanje namreč zavira 5 delovanje celotnega MCU. 3 Število bitov pove, koliko niti oz. vhodov lahko sprocesira MCPU v enem procesorskem ciklu. Višje število vhodov pomeni zmogljivejši MCPU. 4 Ali sistemska ura pove, koliko procesorskih ciklov procesor opravi v enoti časa. 5 Angleško tudi bottleneck. 15

16 Slika 3.3: Krivulja kvocienta k med ν MCP U in ν uz. Poleg visokih frekvenc MCPU se pojavi zahteva po visokih frekvencah ADC in DAC, ki morata biti vsaj 100 khz. Višja frekvenca ADC omogoča hitrejši zajem podatkov, kar pomeni manj izgubljenih podatkov in s tem boljšo meritev. ATMEGA16 ima vgrajene 10- bitne ADC, ki lahko vhodnemu signalu dodeljo eno izmed n = = 1023 števil. Če se vhodni signal, npr. napetost, giblje med U min = 0 V in U max = 5 V, ADC napetosti U min dodeli najmanjše število 0 in napetosti U max najvišje število Izračunamo ločljivost 10-bitnega ADC l 10b (3.1), ki znaša l 10b 0, 005 V. l 10b = U max n = 5 V 0,005 V (3.1) 1023 Pojavi se potreba po višji ločljivosti, katero dosegamo z več-bitnimi ADC. 12-bitni ADC vhodnemu signalu dodeli eno izmed n = 4095 števil, kar za zgornji primer prinese ločljivost l 12b 0,001 V. Ločljivost 12-bitnega ADC je približno štirikrat večja od 10-bitnega ADC, kar omogoča natančnejše zajemanje podatkov in kot posledico npr. natančnejše krmiljenje mobilnega robota po črni sledi, kar prinese prednost na tekmovanjih, kot je npr. ROBOsled [11], kjer učenci osnovnih šol tekmujejo tudi s samogradnimi roboti. ATMEGA16 ne omogoča neposredne komunikacije preko dobro poznanega USB protokola oz. priključka. Računalniška podjetja pri PC opuščajo ostale priključke, zaradi česar je neposredno programiranje ATMEGA16 nemogoče 6. Še vedno je mogoče na vgrajeni sistem dodati čip oz. periferno napravo, ki pretvori USB protokol v enega izmed protokolov, podprtih na ATMEGA16. Slednji podpira paralelni in serijski protokol oz. RS232, ki ga lahko pretvorimo v USB protokol preko čipa FTDI. Slednji stane več kot 10 [12], kar 6 V primeru stacionarnega računalnika še vedno lahko kupimo razširitveno kartico za opuščene priključke, medtem ko v primeru prenosnih računalnikov to ni mogoče. 16

17 je več kot nov MCU s podprtim USB protokolom. To je vredno upoštevati pri zasnovi lastnega vgrajenega sistema, ki naj bi bil v šolah čim cenejši in s tem dostopnejši. Pri izbiri MCU moramo paziti na njegovo namembnost, ki je v šoli npr. programiranje robotov, kjer poleg že naštetih zahtev potrebujemo dodatno periferijo: PWM periferijo za krmiljenje servo motorjev, LCD periferijo za krmiljenje LCD prikazovalnikov, periferijo za spominske kartice, ki omogočajo večjo prenosljivost podatkov, čim večje število števcev za pisanje kompleksnejših programov, čim večje število prekinitev 7, ki omogočajo izvajanje večih rutin 8 naenkrat, čim večje število splošno namenskih vhodov in izhodov GPIO. Poleg omenjene periferije je zaželjena čim večja podpora MCU v OS Linux. Pod besedo podpora si predstavljamo primere programov, gonilnike, knjižnice 9, elektronske sheme, knjige Iskanje primernega mikrokrmilnika Odločitev za nakup MCU ni enostavna, saj se na tržišču nahaja mnogo MCU, ki so na prvi pogled podobni, a se razlikujejo v pomembnih malenkostih. Da bi kupili optimalni MCU, je potrebno zahtevane periferije in potrebe, omenjene v poglavju 3.1.1, opredeliti kot tehniške kriterije. Poleg tehniških kriterijev so dodani tudi ekonomski kriteriji, npr. količinska cena. Znotraj kriterijev je potrebno določiti točkovnik in kriterije ovrednotiti z dodano težo u 10. Teža omogoči ločevanje pomembnih funkcij MCU od manj pomembnih. Naslednji korak je pregled ponudb trgovcev z elektroniko, kot je npr. trgovsko podjetje Farnell [13], kjer se izmed vseh MCU izbre nekaj kandidatov. Slednje se razvrstiti v tabelo, tabela 3.1, in opravi se postopek točkovanja. Točke t je potrebno pomnožiti s težo u in jih na koncu sešteti. Pri ekonomskih kriterijih velja u 0, ker je nižja cena prednost. Optimalni MCU je tisti z največjo končno vsoto točk. Končna vsota je sestavljena iz vsote tehniških in ekonomskih kriterijev. Največje število točk je po opisanem postopku zbral MCU po imenu LPC3141, ki je podrobno opisan v poglavju Angleško tudi interrupt. 8 Ponavljajoč se postopek. 9 Zbirka programskih funkcij oz. ukazov. 10 Število, s katerim je kriterij pomnožen. Določa pomembnost kriterija. 17

18 kandidati LPC3141 LPC3130 LPC1758 LPC3180 MCF52277 MCF5275 JN5139 AT91 PIC32MX575 t t u t t u t t u t t u t t u t t u t t u t t u t t u kriterij točkovnik u kriteriji kapac. RAM [kb] frek. MCPU [MHz] št. ADC ločlj. ADC [bit] frekv. ADC [MHz] št. DAC ločlj. DAC [bit] frekv. DAC [MHz] > > , / / / 0 / 0 / 0 / 0 / / / 0 2 / 0 / 0 / 0 / 0 / / 0 / / / 0 5 / 0 / 0 / 0 / 0 / / / 0 PWM UART SPI USB Linux podpora / 0 / 0 / 0 / 0 / 0 / 0 / 0 Σ tehniških kriterijev kriterij u ekonomski kriteriji količinska cena na 100 kosov [ ] -7 4,50-31,50 3,12-21,84 6,48-45,36 10,45-73,15 / -0 / -0 5,82-40,74 / -0 4,86-34,02 cena na 1 kos [ ] -3 6,35-19,05 4,42-13, ,51 12,36-37,08 / -0 21,34-64,02 9,16-27,48 17,06-51,18 7,40-22,20 Σ ekonomskih kriterijev -50,55-35,10-72,87-110, ,02-68,22-51,18-56,22 Σ tehniških in ekonomskih kriterijev 375,45 330,90 245,13 265, ,98 213,78 136,82 153,78 Tabela 3.1: Tabela kriterijev in izbira najprimernejšega kandidata LPC

19 3.1.3 Mikrokrmilnik LPC3141 LPC3141 je MCU, ki ga izdeluje podjetje NXP. Zgrajen je okoli enojedrnega MCPU, imenovanega ARM926ej-s s hitrostjo 270 MHz. MCPU izdeluje drugo podjetje, imenovano ARM. LPC3141 ima 4 mojstre 11, slika 3.4. Dva izmed teh sta I-cache in D-cache, s katerima upravlja neposredno. Preostala mojstra sta DMA in USB OTG. Slednji lahko prevzame tudi vlogo sužnja. Periferije so skupaj s pomnilniškimi enotami razvrščene v 14 suženjskih domen, znotraj katerih vsaki periferiji pripada več modulov. Sužnje in mojstre povezuje večplastna AHB matrika, slika 3.4. Znotraj domene posamezne periferije in njihove module povezuje APB matrika. Slika 3.4: AHB matrika med seboj povezuje 4 mojstre in 14 suženjskih domen [14, str. 3]. Dobra lastnost večplastne AHB matrike je nemotena povezava med mojstri in sužnji. Edina omejitev se pojavi, ko več mojstrov zahteva dostop do istega sužnja. V takem primeru je potreben dogovor oz. arbitraža. Pri dogovoru je potrebno določiti prioriteto mojstrov, s katero upravlja posebni register 12, ki se nahaja v suženjski domeni 0, slika 3.4, 11 Mojster je v računalništvu komponenta, ki je nadrejena ostalim komponentam, imenovanim sužnji. Mojster izbira sužnje in jim pove, kaj naj delajo. 12 Pomnilnik je sestavljen iz pomnilniških domen, te pa iz spominskih celic z naslovi. Hitre spominske celice se imenujejo registri. Ti vsebujejo določeno število bitov, katerih zaporedje je pomembno. Število bitov v enem registru je odvisno od bitnosti sistema. Tako ima npr. 32-bitni sistem v registru 32 bitov, izmed katerih je prvi bit 0, zadnji pa bit

20 oz. pomnilniški celici z naslovom 0x , slika 3.5. Njegovo ime je AHB0_EXTPRIO, njegov pomnilniški naslov pa 0x , kar je znotraj pomnilniške domene APB0. Slika 3.5: Pomnilnik, sestavljen iz pomnilniških domen, znotraj katerih so registri [14, str. 14]. Zagonski postopek LPC3141 ob ponovnem zagonu vedno začne z izvajanjem kode na lokaciji 0x , kjer se nahaja 4 kb procesorskega pomnilnika. Slednji je le ob zagonu zasenčen, stran 28, s prvimi 4 kb pomnilnika ISROM z začetkom na naslovu 0x , slika 3.5. V prvih 4 kb ISROM je shranjen zagonski postopek, slika 3.6. Ta najprej izklopi vse prekinitve in poskrbi za neprekinjen zagon. Sledi izklop MMU, kar onemogoči napačno naslavljanje pomnilnika. Nato se sp postavi na vrh ISRAM, da ga MCPU lahko pobriše. Ko je ISRAM pobrisan, sledi določanje zagonskega načina. LPC3141 omogoča 6 zagonskih načinov, izbranih s kombinacijo logičnih stanj na MCU pinih GPIO0, GPIO1 in GPIO2, priloga A. Za uporabo v šoli je najprimernejši zagonski način USB DFU in je zaradi tega edini obravnavani. Zagonski način USB DFU najprej preko CRC preveri, ali je izvršljiva datoteka 14 na PC primerna za izvajanje na LPC3141. Datoteka je lahko velika največ 13 0x na začetku naslova označuje šestnajstiški, angleško hexadecimal oz. hex, zapis s 16 simboli, ki so števila od 0-9 in črke A-F. Za razliko od 0x, 0b na začetku pomeni dvojiški, angleško binary, zapis. 0x je enako kot 0b Angleško tudi executable file, je končna različica programa, pripravljena za izvajanje. 20

21 128 kb. Če CRC potrdi primernost izvršljive datoteke, se ta preko USB vodila prenese s PC, ki je v tem primeru mojster, na naslov 0x znotraj ISRAM, imenovan vstopna točka 15. Naslov vstopne točke izvršljivega programa določimo znotraj povezovalne skripte, datoteka 5.6, medtem ko njeno ime definiramo znotraj zagonske kode, datoteka 5.5. Ime vstopne točke kasneje s pridom uporabljamo v C-datotekah, datoteka 6.1. LPC3141 zahteva, da je naslov vstopne točke enak 0x [15, str. 83]. Zadnji del vprogramirane kode, shranjene v ISROM, preusmeri MCPU na vstopno točko, s čimer se zaključi izvajanje vprogramirane kode v ISROM, ki slednjo zamenja z na začetku zasenčenimi 4 kb spomina, in začne izvajanje uporabniške izvršljive datoteke v ISRAM. Slika 3.6: Zagonski postopek LPC3141 [15, str. 84]. 15 Angleško entry point je naslov, kjer se nahaja prvi ukaz uporabniškega programa. 21

22 CGU CGU, slika 3.7, je najpomembnejša periferija v LPC3141, ki skrbi za sistemsko uro oz. frekvenco mojstrov, pomnilniških modulov in vseh periferij oz. modulov, razvrščenih v domene, slika 3.4. CGU iz 5 referenčnih frekvenc preko multiplekserjev 16, stikal in delilnikov ustvari 92 izhodnih frekvenc, ki gredo v module. Ker imajo nekatere periferije več modulov, ki potrebujejo lastno frekvenco, je število izhodnih frekvenc CGU večje kot število periferij. Slika 3.7: Zgradba CGU. Prvo referenčno sinusno frekvenco 12 MHz ustvarja zunanji Pierce oscilator [16]. Druge referenčne frekvence prihajajo neposredno iz MCU vhodov I2SRX_BCK0, I2SRX_BCK1, I2SRX_WS0 in I2SRX_WS1, priloga A, ki služijo sprejemanju avdio signalov po protokolu I2S. Skupaj do stikalnega vezja prispe 7 vhodnih frekvenc, med katerimi lahko v izbirni fazi, slika 3.7, izbira 12 baznih frekvenc. Bazne frekvence izberejo eno izmed vhodnih frekvenc preko dvostranskega stikala, slika 3.8. Slika 3.8: Dvostransko stikalo, s katerim se vrši izbirna faza znotraj CGU [15, str. 286]. 16 Vezje z večimi vhodi in enim izhodom, ki preko posebnega stikala izbere enega izmed vhodov in njegov signal prenese na izhod. 22

23 Ob zagonu MCU je stran 1 stikala vedno omogočena, medtem ko je stran 2 onemogočena. Izbira oz. preklop se izvede tako, da se na onemogočeni strani 17, v tem primeru stran 2, preko registrov FS1_x in FS2_x 18 izbere eno izmed 7 vhodnih frekvenc 19, tabela 3.2. Nato je potrebno omogočeno stran, v tem primeru stran 1, izklopiti preko bita 0 v registru SCRx in vklopiti onemogočeno stran, v tem primeru stran 2, preko bita 1 v registru SCRx [15, str. 249, 262]. S tem je izbirna faza končana. vrednost registrov FS1 x in FS2 x 0x0 0x1 0x2 0x3 0x4 0x5 0x6 izbrana vhodna frekvenca oscilator I2SRX BCK0 I2SRX WS0 I2SRX BCK1 I2SRX WS1 avdio PLL sistemski PLL Tabela 3.2: Izbira različnih referenčnih frekvenc z registri FS1 x in FS2 x [15, str. 263]. V razširitveni fazi, slika 3.7, vsaka bazna frekvenca poskrbi za več modulov, tabela 3.3. Frekvence modulov znotraj ene bazne frekvence so zatorej vedno usklajene oz. sinhronske. V kolikor baznih frekvenc ne bi bilo, bi večina modulov v LPC3141 izgubila funkcionalnost. Nekatere bazne frekvence lahko namerno izklopimo tako, da v registrih SCR_x [15, str. 262] bit 3 postavimo v logično 1. Prav tako lahko izklopimo frekvence posameznih modulov. To storimo tako, da bit 1 v registrih PCRm 20 [15, str ] postavimo v logično 0 [15, str ]. št. x bazna frekvenca moduli 0 SYS BASE APB0 CLK, APB1 CLK, APB2 CLK, APB3 CLK, APB4 CLK, AHB2MMIO CLK, AHB0 CLK, SDMA PCLK, SDMA CLK GATED, NANDFLASH S0, NANDFLASH PCLK, ARM926 BUSIF CLK, SD MMC HCLK, USB OTG AHB CLK, ISRAM0 CLK, ISRAM1 CLK, ISROM CLK, MPMC CFG CLK, MPMC CFG CLK2, MMIOINTC CLK, ARM926 CORE CLK, NANDFLASH AES CLK, NANDFLASH NAND CLK, NANDFLASH ECC CLK, SD MMC CCLK IN, CLOCK OUT, EBI CLK, ARM926 RETIME CLK, MPMC CFG CLK3, RED CTL RSCLK 1 AHB APB0 BASE AHB TO APB0 PCLK, IOCONF PCLK, ADC CLK, ADC PCLK, EVENTROUTER PCLK, WDOG PCLK, CGU PCLK, SYSCREG PCLK, RNG PCLK 2 AHB APB1 BASE AHB TO APB1 PCLK, PWM PCLK, PWM PCLK REGS, PWM CLK, TIMER0 PCLK, TIMER1 PCLK, TIMER2 PCLK, TIMER3 PCLK, I2C0 PCLK, I2C1 PCLK 3 AHB APB2 BASE AHB TO APB2 PCLK, PCM PCLK, PCM APB PCLK, UART APBQ CLK, LCD PCLK, SPI PCLK, SPI PCLK GATED, LCD CLK 4 AHB APB3 BASE AHB TO APB3 PCLK, I2STX FIFO 0 PCLK, I2STX IF 0 PCLK, I2STX FIFO 1 PCLK, I2STX IF 1 PCLK, I2SRX FIFO 0 PCLK, I2SRX IF 0 PCLK, I2SRX FIFO 1 PCLK, I2SRX IF 1 PCLK 7 CLK1024FS BASE I2S EDGE DETECT CLK, I2STX WS0, I2STX WS1, ADC PCLK, I2SRX WS1, I2STX BCK0 N, I2SRX BCK0 N, I2STX CLK0, CLK 256FS, I2STX BCK1 N, I2SRX BCK1 N, SPI IPQ CLK, SPI IP CLK GATED 8 I2SRX BCK0 BASE I2SRX CK0 9 I2SRX BCK1 BASE I2SRX BCK1 5 PCM BASE PCM CLK IP 6 UART BASE UART U CLK 10 SPI CLK BASE SPI CLK 11 SYSCLOCK O BASE frekvenca gre na MCU izhod z imenom SYSCLOCK O, priloga A Tabela 3.3: Bazne frekvence in njihovi moduli [15, str , ]. 17 Med obratovanjem frekvence ne smemo menjati. 18 x je celo število od 0 do 11 in označuje bazno frekvenco, tabela Ob zagonu MCU je vrednost vseh FS1 x in FS2 x registrov enaka 0x0, kar pomeni, da je za vse bazne frekvence izbrana vhodna frekvenca 12MHz, ki prihaja iz oscilatorja. V kolikor za bazno frekvenco želimo izbrati drugo vhodno frekvenco, v registre FS1 x in FS2 x vpišemo drugo vrednost, tabela m je število od 0 do 91 in označuje enega izmed 92 modulov. 23

24 Nekatere bazne frekvence imajo enega ali več delilnikov, slika 3.7, ki bazno frekvenco lahko delijo in ustvarijo njeno izpeljanko. 92 modulov nato lahko preko registrov ESRy 21 [15, str , ] izbere lastno bazno frekvenco ali njeno izpeljanko. Potrebno je opozoriti, da imajo bazne frekvence različno število delilnikov, zaradi česar so biti za izbiro delilnikov v registrih ESRy različno razporejeni. Moduli ne morejo izbrati sosednje bazne frekvence ali njenih izpeljank. Tako lahko npr. moduli bazne frekvence AHB_APB0_BASE izbirajo med delilnikoma 7, 8 ali bazno frekvenco. Moduli so v tem primeru AHB_TO_APB0_- PCLK, IOCONF_PCLK, CGU_PCLK, ADC_CLK, ADC_PCLK, EVENTROUTER PCLK, WDOG_PCLK, SYS- CREG_PCLK in RNG_PCLK [15, str. 245, 299]. Če npr. modul RNG_PCLK želi izbrati bazno frekvenco, je potrebno v regitru ESR39 bit 0 postaviti v logično 0. Če isti modul želi izbrati enega izmed delilnikov, je potrebno najprej izklopiti vse delilnike bazne frekvence, v tem primeru AHB_APB0_BASE. To storimo tako, da v registru BCR1 [15, str. 268, 269] bit 0 postavimo v logično 0. Nato je potrebno nastaviti izbrani delilnik, v tem primeru delilnik 7. Delilnik deli bazno frekvenco ν b in vrne deljeno frekvenco ν d (3.2) [15, str. 269]. ν d = n m ν b (3.2) Ko npr. želimo deliti bazno frekvenco ν b = 12 MHz s 4, izberemo n = 1 in m = 4 in na izhodu delilnika dobimo deljeno frekvenco ν d = 3 MHz. Sledi izračun vrednosti MSUB (3.3) in MADD (3.4), katerih binarno obliko je potrebno zapisati v zato določene bite v registrih FDCz 22 [15, str , 269]. Ker nastavljamo delilnik 7, moramo vrednost MSUB zapisati v bite in vrednost MADD v bite 3-10 registra FDC7 23. MSUB = n (3.3) MADD = m n (3.4) Sledi vklop vseh delilnikov bazne frekvence, v tem primeru AHB_APB_BASE, kar storimo tako, da v registru BCR1 bit 0 postavimo v logično 1. Nato poženemo izbrani delilnik. To storimo tako, da bit 1 registra FDC7 postavimo v logično 1. Nazadnje je potrebno za modul, v tem primeru RNG_PCLK, namesto bazne frekvence izbrati deljeno frekvenco delilnika. V registru ESR39 [15, str. 256, 266] bit 0 postavimo v logično 1, s čimer je izbran vhod iz delilnikov in ne bazna frekvenca. Nato bit 1 postavimo v logično 0, s čimer je izbran delilnik 7. V kolikor bi na to mesto vnesli logično 1, bi izbrali delilnik y je število od 0 do 88 in označuje module z vsaj enim delilnikom. Trije moduli nimajo delilnikov in posledično nimajo registrov ESRy. 22 z je število od 0 do 23 in označuje delilnike. 23 V primeru delilnika FDC17 ne bi uporabljali istih bitov! 24

25 Vhodno/izhodni konfiguracijski modul LPC3141 ima funkcijske pine, ki lahko izbirajo med normalno ali GPIO vlogo, ter pine, ki imajo nespremenljivo GPIO vlogo. Funkcijskim pinom je ob ponovnem zagonu MCU privzeta normalna vloga. Funkcijski pini v tej vlogi služijo delovanju določenih periferij, ki upravljajo s pinom in ga naredijo neprogramabilnega, dokler mu ne nastavimo druge vloge. Druga vloga je vloga GPIO, v kateri pin postane popolnoma programabilen preko registrov MODE0 in MODE1 [15, str. 311], ki se nahajajo znotraj vhodno izhodnega konfiguracijskega modula (IOCONFIG), katerega napaja frekvenca IOCONF PCLK, tabela 3.3. Ob ponovnem zagonu MCU se vsi biti registra MODE0 nastavijo na 0 in vsi biti registra MODE1 na 1, kar pomeni, da so vsi funkcijski pini v normalni vlogi in z njimi upravljajo periferije. Če želimo spremeniti vlogo pina, moramo tako v registru MODE0 kot v registru MODE1 ustrezno nastaviti N-ti bit, ki ustreza N-temu pinu, tabela 3.4. logično stanje N-tega bita registra MODE0 logično stanje N-tega bita registra MODE1 vloga N-tega pina 0 0 visoko impedančni vhod 0 1 normalna vloga 1 0 izhod v logičnem stanju izhod v logičnem stanju 1 Tabela 3.4: Izbira vloge pinov preko registrov MODE0 in MODE2 [15, str. 318]. Za razliko od funkcijskih pinov so pini z nespremenljivo GPIO vlogo ob ponovnem zagonu nastavljeni kot visoko impedančni vhodi, kar pomeni, da so vsi biti registrov MODE0 in MODE1 enaki 0. Poleg omenjenih registrov je potrebno pred ponovnim zagonom poskrbeti za stanje 0 na pinih TRST_N in JTAGSEL, priloga A. Poudarimo, da ne obstaja le en par registrov MODE0 in MODE1! Registri PINS, MODE0, MODE0_SET, MODE0_RESET, MODE1, MODE1_SET in MODE1_RESET [15, str. 312] obstajajo za vsako periferijo [15, str. 311]. Posamezni biti znotraj teh registrov so namenjeni posameznim pinom [15, str ]. Do registrov MODE0 in MODE1 za izbrano periferijo dostopamo tako, da v naslov najprej vnesemo bazni naslov pomnilniške domene IOCONFIG (0x ), slika 3.5, kateri prištejemo naslov periferije, določen znotraj domene IOCONFIG, tabela 3.5, in naslov željenega registra, tabela 3.6. periferija bazni naslov periferije znotraj domene IOCONFIG CGU 0x080 GPIO 0x1C0 PWM 0x2C0 SPI 0x Tabela 3.5: Bazni naslovi periferij v IOCONFIG [15, str. 311]. register naslov opis PINS 0x000 register za branje stanj na pinih v vlogi visokoimpedančnih vhodov, ki lahko bere le vse pine naenkrat MODE0 0x010 register za nastavljanje vloge pinov MODE0 SET 0x014 register za nastavljanje in branje bitov registra MODE0 MODE0 RESET 0x018 register za vračanje bitov registra MODE0 v privzete nastavitve MODE1 0x020 register za nastavljanje vloge pinov MODE1 SET 0x024 register za nastavljanje in branje bitov registra MODE1 MODE1 RESET 0x028 register za vračanje bitov registra MODE1 v privzete nastavitve Tabela 3.6: Naslovi registrov v IOCONFIG [15, str. 312]. 25

26 Tako je naslov registra npr. MODE1_RESET za periferijo GPIO enak 0x x1C0 + 0x028 = 0x130031E8. S tem, ko znamo določiti naslove registrov, lahko registre nastavljamo, vendar moramo vedeti, kateri bit znotraj registrov MODE0, MODE0_SET, MODE0_RESET, MODE1, MODE1_SET in MODE1_RESET je zadolžen za posamezni pin, priloga A, tabela 3.7. bit v registrih MODE0, MODE0 SET, MODE0 RESET, MODE1, ime pina lokacija pina MODE1 SET in MODE1 RESET 0 GPIO1 J10 1 GPIO0 K10 2 GPIO2 L14 3 GPIO3 B11 4 GPIO4 C11 5 GPIO11 H11 6 GPIO12 H10 7 GPIO13 J12 8 GPIO14 J14 9 GPIO15 J13 10 GPIO16 J11 11 GPIO17 K12 12 GPIO18 K14 13 GPIO19 H11 14 GPIO20 K13 Tabela 3.7: Povezava bitov s pini za periferijo GPIO [15, str ]. PWM modul PWM modul ima le en izhod, dosegljiv na pinu PWM_DATA, priloga A. Na istem izhodu poleg PWM moduliranega signala lahko sprogramiramo tudi PDM moduliran signal ali konstantno stanje logične 1. Za robotiko je zanimiv predvsem PWM moduliran signal, saj z njim krmilimo: hitrost DC motorjev npr. v mobilnih robotih, ki se posledično premikajo hitreje ali počasneje, kot servo motorjev, ki so vgrajeni v sklepe robotske roke in služijo določanju lege in orientacije robotske roke v prostoru. PWM moduliran signal MCU ustvari tako, da primerja binarno vrednost 12-bitnega števca 24 z binarnim številom, programabilnim preko bitov 0-11, v registru PWM_TMR [15, str. 488], ki je dosegljiv na naslovu 0x Izhod modula je v logični 1, če je vrednost 12-bitnega števca nižja od vrednosti v registru PWM_TMR, slika 3.9. Izhod PWM modula se samodejno zažene, ko v register PWM_TMR vnesemo kakršno koli vrednost bitni števec šteje od 0 do vrednosti = 4095, slika 3.9, oz. 0xFFF. Ko doseže največjo vrednost, začne ponovno šteti od 0. 26

27 Slika 3.9: Stanje na izhodu PWM modula [15, str. 487]. Poleg registra PWM_TMR ima PWM modul še register PWM_CNTL [15, str. 489], dosegljiv na naslovu 0x Biti registra PWM_CNTL so razporejeni v 4 skupine, izmed katerih ima vsaka skupina posebno funkcijo, tabela 3.8. bit vrednost ob zagonu vrednost funkcija 00 frekvenca na izhodu je enaka PWM CLK 0 in frekvenca na izhodu je enaka PWM CLK / 2 10 frekvenca na izhodu je enaka PWM CLK / 4 11 frekvenca na izhodu je enaka PWM CLK / izhodu je v logični na izhodu se ponavljajo zgornji 4 biti PWM TMR registra, kar predstavlja loop način delovanja namesto PWM moduliranega signala na izhodu dobimo PDM moduliran signal Tabela 3.8: Funkcije bitov v registru PWM CNTL [15, str. 489]. Poleg frekvence PWM CLK, tabela 3.8, ima PWM modul še frekvenco PWM PCLK, ki je frekvenca APB matrike, in frekvenco PWM PCLK REGS, ki je frekvenca, s katero delujejo registri PWM modula, tabela Mikroprocesor ARM926ej-s LPC3141 je zgrajen na osnovi MCPU ARM926ej-s. Slednji podpira točno določen nabor ukazov (ISA), kateremu je potrebno prirediti vsak program, napisan v visokem programskem jeziku, npr. C, C#, C++, ali v zbirniku. Slednji mora biti ARM zbirnik 25. Ko program napišemo v visokem programskem jeziku, ga prevedemo v dvojiški zapis, ki je edini zapis, združljiv z MCPU. Prevajanje se vrši preko prevajalnikov, ki so vključeni v različnih razvojnih verigah 26. Obstajata dve vrsti prevajalnikov, za katere Slovenci uporabljamo enoten izraz prevajalnik, vendar pa ju je potrebno ločiti na prevajalnike višjih programskih jezikov 27 in prevajalnike zbirnika 28. Da bi lahko prevajali programe za ARM926ej-s, moramo najprej določiti, kateri ISA podpira, in na podlagi tega izbrati razvojno verigo, ki podpira isti ISA. Ker je podjetje ARM tesno vpleteno v razvoj ISA, se pri poimenovanju svojih MCU poslužuje posebne nomenklature, v kateri vsaka črka v imenu ARM{x}{y}{z}{t}{d}{m}{i}{e}{j}{f}{-s} pove nekaj o MCU [17, str. 37]. 25 Angleško ARM assembly language. 26 Angleško toolchain - je skupina orodij, kot so prevajalniki, razhroščevalniki... Služijo pripravi izvršljivih datotek v dvojiškem zapisu, berljivem družini MCPU, znotraj katere vsi MCU podpirajo isti ISA. 27 Angleško compiler. 28 Angleško assembler, kar ni enako assembly. 27

28 x Družina jedra. y število MMU. z MCPU vključuje I-cache in D-cache. t MCPU podpira 16-bitno procesiranje, imenovano tudi Thumb. d MCPU vsebuje JTAG modul. m MCPU vsebuje hitri množilnik. i MCPU vsebuje EmbeddedICE makro celico za razhroščevanje. e mcpu vsebuje točke t, d, m, i. j mcpu podpira 8-bitno procesiranje, imenovano tudi Jazelle. f MCPU vsebuje vektorsko plavajočo vejico. s mcpu je združljiv s programsko opremo za elektronsko načrtovanje (EDA). Iz zgornjega razberemo, da ARM926ej-s spada v družino ARM9. Slednja podpira ISA različico ARMv5TEJ [17, str. 39]. Glede na poznano različico ISA kasneje na spletu poiščemo prosto dostopno razvojno verigo, poglavje in 5.1.2, s katero brez težav prevajamo programe za ARM926ej-s. ARM jedra so vsa zgrajena po prirejeni arhitekturi računalnika z zmanjšanim naborom ukazov (RISC) [17, str. 4]. Filozofija arhitekture RISC je čim manjše število osnovnih ukazov, ki se izvedejo v enem procesorskem ciklu in so zato hitri. S kombinacijo osnovnih ukazov se nato programsko tvori kompleksnejše ukaze. Pojavi se potreba po kompleksnih ISA in posledično prevajalnikih. Tudi ARM926ej-s ima, tako kot LPC3141, registre, ki jih je mogoče programirati le v ARM zbirniku, v katerem je potrebno napisati zagonsko kodo, datoteka 5.5. Ta sistem vzpostavi do take mere, da lahko na njem teče programska oprema, pisana v višjih programskih jezikih. Za pisanje zagonske kode je ključnega pomena poznavanje ARM registrov, poglavje ARM registri V vseh ARM jedrih je ključnega pomena tudi nabor 32-bitnih registrov. Če želimo izvajati operacije s kakršnimi koli spremenljivkami, shranjenimi v pomnilniku, jih je potrebno najprej prenesti v nabor registrov. Ko se ena ali več vrednosti nahaja v naboru registrov, aritmetično logična enota (ALU) ali množilno prištevalna enota (MAC) opravita željene operacije in rezultat shranita nazaj v nabor registrov. Nekateri registri v naboru so vidni vedno, medtem ko jih je nekaj, ki so vidni le v enem izmed 7 procesorskih načinov 29, slika Registrom, ki niso vidni vedno, rečemo tudi zasenčeni registri. 28

29 Slika 3.10: Nabor ARM registrov, kjer sivo obarvani registri niso vidni v vsakem procesorskem načinu, rdeče obrobljeni registri pa so posebnonamenski registri [17, str. 24]. Vedno so vidni registri r0-r7, r15 oz. programski števec (pc) ter trenutni programski statusni register (cpsr). Ko pride do menjave procesorskega načina, se registri r8-r12, r13 oz. kazalček sklada (sp) ter r14 oz. povratni register (lr) zamenjajo z istoimenskimi registri določenega procesorskega načina. Tako se v primeru menjave procesorskega načina iz sistemskega v hitro prekinitveni registri r8-r14 zamenjajo z registri r8 fiq-r14 fiq, slika Informacija, shranjena v registrih r8-r14, tako ostane nespremenjena, vse dokler se MCPU ne vrne iz hitro prekinitvenega načina v sistemski procesorski način. Tako MCPU lahko nadaljuje delo v sistemskem procesorskem načinu tam, kjer ga je končal, preden je opravil preklop na hitro prekinitveni način. Da bi se MCPU vrnil v popolnoma identično okolje, se pred preklopom cpsr shrani v shranjevalne procesorske statusne registre, (spsr) v tem primeru v spsr fiq, da se lahko kasneje obnovi. 29

30 Register cpsr Register cpsr, slika 3.11, vsebuje 32 bitov, razdeljenih na 4 polja: polje C kot Control X kot extension S kot Status F kot Flags biti Biti 0-4 narekujejo procesroski način, v katerem se trenutno nahaja MCPU. Bit 5 oz. Thumb status v logični 1 narekuje 16-bitno Thumb procesiranje, v logični 0 pa prednastavljeno 32-bitno ARM procesiranje. Bit 6 oz. prekinitvena maska I v logični 1 onemogoča prekinitve, medtem ko bit 7 oz. prekinitvena maska F v logični 1 onemogoča hitre prekinitve. Biti 8-15 za nas niso zanimivi. Biti za nas niso zanimivi. Biti so rezervirani za prihodnost, medtem ko so biti pogojne zastavice N, Z, C in V, katere glede na rezultat osvežuje ALU vedno, ko konča aritmetično ali logično operacijo. Slika 3.11: Register cpsr [17, str. 22]. Izmed 7 procesorskih načinov je le uporabniški način neprivilegiran, kar pomeni, da v cpsr lahko spreminja in bere pogojne zastavice, medtem ko lahko le bere prekinitvene maske, Thumb status in procesorski način. Uporabniški način je način, v katerem se izvajajo vsi programi. Ob zagonu je MCPU v administratorskem procesorskem načinu, ki je privilegiran, in v cpsr lahko spreminja karkoli. To je idealno za zagonsko kodo, poglavje 5.1.6, v kateri je potrebno nastaviti sklade, poglavje 3.2.1, za vse uporabniške načine. 30

31 ARM sklad in kazalček sklada sp Sklad 30 je oblika shranjevanja podatkov, kjer je element, ki je shranjen zadnji, prebran prvi. Je del pomnilnika, katerega si lahko predstavljamo kot elemente, naložene en na drugem. Elementi v 32-bitnem sistemu so ponavadi 32-bitne spominske celice z 32-bitnimi naslovi. Naslovi si v 32-bitnem sistemu sledijo v zaporedju, npr. 0x000, 0x004, 0x008, 0x00C za naraščajoči sklad in 0x00C, 0x008, 0x004, 0x000 za padajoči sklad. S skladom je povezan tudi register sp, ki kaže na vrh trenutnega sklada. Vrh je lahko naslov zadnje zasedene spominske celice v primeru polnega sklada 31 ali naslov zadnje prazne spominske celice, ki bo prepisana naslednja v primeru praznega sklada 32. ARM926ej-s uporablja polni padajoči sklad, slika 3.12, kar pomeni, da sp kaže npr. na naslov zasedene spominske celice npr. 0x00C, ki je tudi zadnji element sklada, medtem ko bo naslednji element zasedel spominsko celico z naslovom 0x008, saj je sklad padajoč. Ker bo slednji element zadnji v skladu, bo sp nato kazal na naslov njegove spominske celice 0x008. Če je podatek večji od ene spominske celice, se sp lahko poveča ali zmanjša za več kot en element sklada. Slika 3.12: Polni padajoči sklad. Programski števec pc Register pc je posebnonamenski register, v katerem je naslov naslednjega ukaza, katerega naj bi sprocesiral MCPU. Lahko kaže na naslov neke funkcije, npr. po imenu c_entry, ali pa kar na naslov npr. 0x , ki ga moramo najprej naložiti v nek register in šele nato v pc. 30 Angleško stack. 31 Angleško tudi full stack. 32 Angleško tudi empty stack. 31

32 Povratni register lr Register lr je posebnonamenski register, v katerega MCPU shrani trenutni naslov pc. Shranjevanje trenutnega naslova pc se zgodi vedno, ko MCPU dobi navodilo za skok na nek drug naslov ali funkcijo, vendar se želi po izvajanju te funkcije vrniti na prvotni naslov. To stori tako, da vrednost v lr naloži v pc. Koprocesorski register p15 Register p15, slika 3.13, je posebnonamenski register, ki omogoča vklop ali izklop določenih komponent MCPU. To je priročno ob zagonu, kjer je potrebno izklopiti MMU in prevajalni razgledni prenosnik (TLB), saj lahko s prenašanjem fizičnih naslovov v virtualne povzročita zmedo. Poleg tega je ob zagonu potrebno najprej izklopiti, nato počistiti 33 in ponovno vklopiti I-cache ter izklopiti D-cache. I-cache in D-cache lahko vsebujeta naslove prejšnjih programov, ki so neveljavni. Slika 3.13: Koprocesorski register p15 [17, str. 514]. 33 Angleško flush. 32

33 4 Linux Linux je prosto dostopni OS, katerega izvorna koda je v javni lasti in je zaščitena pod GNU GPL licenco. Dobra stran omenjene licence je, da imajo uporabniki vpogled v izvorno kodo OS. To omogoča poglobljeni študij delovanja OS in ne le površinske uporabe, kot npr. v OS Windows. Osrednji del Linuxa je jedro 34, ki je samo po sebi neuporabno. Zato skupine razvijalskih zanesenjakov po Svetu okoli Linux jedra integrirajo razne pisarniške pakete, programe za upravljanje z ukaznimi vrsticami (CLI), razvojne verige, grafične vmesnike (GUI), kot npr. Kde, Gnome, Xfce... Tako nastajajo Linux različice, imenovane tudi distribucije. 4.1 Distribucija Xubuntu Distribucija Xubuntu izhaja iz distribucije Ubuntu, ki je ena izmed vodilnih distribucij. To je posledica dobre podpore uporabnikom in odličnega Ubuntu software centra, kjer uporabniki enostavno s spleta prenesejo in namestijo večino programov. Distribucija Ubuntu vse od različice naprej uporablja GUI Unity, ki je zahteven za RAM. To je razlog, da je v diplomskem delu uporabljena distribucija Xubuntu z manj zahtevnim GUI Xfce. Tudi ta distribucija vsebuje Ubuntu software center Namestitev Xubuntu Distribucijo Xubuntu lahko prenesemo z domače strani [18], kjer kliknemo zavihek Get Xubuntu, izberemo lokacijo bližnjega strežnika, kot npr. Germany, in snamemo slikovno datoteko 35, ki mora biti pisana za 32-bitno arhitekturo, označeno z 86x, i386 ali IA32. Slikovno datoteko nato s pomočjo programa za izdelavo zgoščenk, npr. InfraRecorder [19], posnamemo na zgoščenko, katero vstavimo v optični čitalnik in ponovno zaženemo PC. 34 Angleško kernel. 35 Angleško image file - je format s končnico.iso, ki simulira vse sektorje prenosnih medijev, npr. zgoščenke. 33

34 Če se ob zagonu PC Xubuntu Live 36 ne zažene, je potrebno v osnovnem vhodnoizhodnem sistemu (BIOS) v zavihku boot device order postaviti branje optičnih medijev pred branje trdih diskov. V BIOS vstopimo, če takoj po zagonu PC držimo eno izmed tipk F1, F2, F10, Del ali Esc. Tipka je odvisna od proizvajalca PC. Če je zagon Xubuntu Live uspešen, je potrebno počakati nekaj časa, da se v celoti vzpostavi. Ko je Xubuntu Live vzpostavljen, na namizju kliknemo na ikono Install Xubuntu 11.04, slika 4.1, ki zažene nastavitvenega čarovnika. Slika 4.1: Xubuntu Live način. Nastavitveni čarovnik najprej vpraša po nastavitvenem jeziku, slika 4.2(a), kjer je najbolje izbrati angleški jezik, saj je skoraj vsa podpora za Linux pisana v angleškem jeziku. Sledi okno, slika 4.2(b), kjer pustimo prednastavljene nastavitve, in kliknemo Forward. Nato sledi nastavitev particij, slika 4.2(c), kjer kliknemo Erase everything and reinstall. Slednja v celoti prepiše disk, izberan v naslednjem oknu, slika 4.2(d). Sledi nastavitev lokacije, slika 4.2(e). Na zemljevidu kliknemo Slovenijo in nato kliknemo Forward. V naslednjem oknu, slika 4.2(f), poteka izbira jezikovne predloge za tipkovnico. V levem stolpcu izberemo možnost Slovenia, v desnem stolpcu Slovenian in nato kliknemo Forward. Proti koncu je potrebno le še vnesti podatke o uporabniku, slika, 4.2(g). Vnesemo ime in priimek uporabnika, ime PC, uporabniško ime, geslo in način vpisovanja v sistem. Ko kliknemo Forward, čarovnik v celoti nastavi in namesti distribucijo Xubuntu Na koncu namestitve iz optičnega čitalnika odstranimo zgoščenko in opravimo ponovni zagon PC. Če med nastavitvijo nastopijo težave, je na spletu objavljeno mnogo zajemov zaslona, kjer uporabniki nazorno in po korakih predstavijo zgoraj opisani postopek, [20]. 36 Način, ki omogoča testiranje distribucije Xubuntu, ne da bi jo namestili. 34

35 (a) (b) (c) (d) (e) (f) (g) (h) Slika 4.2: (a-h) Nastavitev distribucije Xubuntu

36 5 Postavitev razvojnega okolja Ko je distribucija Xubuntu nameščena, se lotimo nastavitve razvojnega okolja, katerega ključni del je razvojna veriga. 5.1 Postavitev in uporaba razvojne verige v CLI Za začetek je potrebno postaviti osnovno razvojno verigo, ki ne vsebuje IDE. Zato je programe potrebno prevajati preko CLI. CLI ponuja večji nabor ukazov za prevajanje kot IDE, vendar je ukaze potrebno pisati v tekstovni obliki, kar pri večjih projektih postane zamudno. S tem namenom se za večje projekte napiše datoteka, imenovana makefile, datoteka 5.4, ki samodejno izvede več CLI ukazov, kasneje pa jo lahko uporabimo v IDE, poglavje Znanje CLI ukazov razvojne verige je torej nujno, če želimo uspešno usposobiti IDE Izbira in snemavanje razvojne verige Zahteve za razvojno verigo so sledeče: biti mora prosto dostopna in po možnosti zaščitena z licenco GNU GPL, podpirati mora ISA ARMv5TEJ, stran 28, in obstajati mora v različici za 32-bitni OS Linux, označen s 86x, i386 ali IA32. Na OS Linux obstaja razvojna veriga prosto dostopnih orodij, imenovana GNU Compiler Collection (GCC), katero specializirana podjetja predelajo sebi v prid. Ker pa licenca GNU GPL zahteva, da je vsaka izpeljanka zaščitenega programa prav tako zaščitena z isto licenco, s tem pa prosto dostopna, so podjetja prisiljena na spletu objaviti lastne predelave razvojnih verig, med katerimi najdemo tudi razvojne verige za arhitekturo ARM. Nekaj zadetkov najdemo, če v internetni iskalnik Google vpišemo iskalni niz: Linux IA32 toolchain ARM, slika

37 Slika 5.1: Zadetki ARM razvojnih verig za OS Linux v iskalniku Google. V diplomskem delu je opisana nastavitev in uporaba prvega zadetka, to je razvojne verige Sourcery CodeBench Lite, katero lahko snamemo na uradni strani podjetja Mentor Graphics [21]. Za snemavanje se je potrebno najprej registrirati, kar storimo tako, da v zgornjem desnem kotu kliknemo Create Account, slika 5.2(a), nato vnesemo elektronski naslov ter izberemo geslo, slika 5.2(b). Ko kliknemo gumb Create an Account Now, nova stran od nas zahteva ponovni vnos gesla in vnos osebnih podatkov, slika 5.2(c). Po kliku na gumb Create My Account nas okno popelje v uporabniško orodno vrstico, kjer lahko po potrebi spremenimo osebne podatke, slika 5.2(d). S tem je registracija končana. Sedaj je potrebno sneti razvojno verigo. Na trenutni strani v zgornji orodni vrstici sledimo povezavi Products Embedded Software, slika 5.2(e), kar odpre novo stran, slika 5.2(f), kjer v levi orodni vrstici kliknemo Sourcery CodeBench. Pojavi se stran, na dnu katere se nahaja povezava z imenom Learn more and download Lite edition, slika 5.2(h). Slednja odpre stran, kjer lahko snamemo prosto dostopno razvojno verigo Sourcery CodeBench Lite za več arhitektur. Potrebno je izbrati arhitekturo ARM, slika 5.2(g), in na naslednji strani prenesti različico none EABI, saj na MCU ne bomo poganjali OS 37. (a) (b) 37 Programom, ki se izvajajo neposrednona na strojni opremi in ne v OS, angleško rečemo bare metal programi. 37

38 (c) (d) (e) (f) (g) (h) Slika 5.2: (a-d) Registracija na strani Mentor Graphics in (e-h) snemavanje razvojne verige Sourcery CodeBench Lite. Ker se različica razvojne verige Sourcery CodeBench Lite stalno spreminja, se lahko zgodi, da različica 9.51, obravnavana v diplomskem delu, ne bo več dostopna. S tem namenom je razvojna veriga dosegljiva na rezervnem strežniku [22] Namestitev razvojne verige V tem poglavju sledi spoznavanje in navajanje na CLI, preko katerega poteka namestitev razvojne verige [23]. Xubuntu omogoča dostop do CLI preko zagonske vrstice, kjer je potrebno slediti povezavi Acessories Terminal Emulator. Ko s spleta snamemo razvojno verigo, se ta shrani na naslov /home/ziga/downloads. Razvojna veriga je stisnjena v formatih tarball in bunzip2 in nosi končnico.tar.bz2. Datoteke tega tipa je potrebno razširiti na nek naslov na disku, ki bo v našem primeru /home/ziga/projects. V slednjem je ziga uporabniško ime, katerega določimo med namestitvijo Xubuntu 11.04, slika 4.2(g). Za razširjanje datoteke najprej odpremo CLI in se z ukazom cd /home/ z i g a /Downloads 38

39 premaknemo v vsebujočo mapo. Najprej je potrebno razširiti format bunzip2, kar storimo z ukazom bunzip2 d c o d e b e n c h l i t e. tar. bz2 in opazimo, da na datoteki odpade končnica.bz2. To pomeni, da smo uspešno razširili format bunzip2. Preostali format tarball raziširimo z ukazom tar xf c o d e b e n c h l i t e. tar in opazimo, da se v vsebujoči mapi pojavi podmapa z imenom arm Slednjo najprej s spodnjim ukazom preimenujemo v cs_lite mv arm c s l i t e in nato njeno vsebino premaknemo na naslov /home/ziga/projects/cs_lite. mv c s l i t e /home/ z i g a / p r o j e c t s / c s l i t e Sedaj, ko je razvojna veriga razširjena in se nahaja na željenem naslovu, si je potrebno bolj podrobno ogledati njeno drevesno strukturo. Opazimo lahko, da se v podmapi /home/ziga/projects/cs_lite/bin nahajajo izvršljive datoteke arm-none-eabi-, ki imajo različne pripone, kot npr. as, gcc, ld, objcopy... slika 5.3. Slika 5.3: Izvršljive datoteke razvojne verige in njihove pripone. Če v GUI želimo z dvojnim miškinim klikom zagnati izvršljive datoteke oz. programe, opazimo, da se nič ne zgodi. Omenjeni programi so namreč prevajalniki, katerim je 39

40 potrebno podati določene parametre. Parametra sta npr. pot do izvornih datotek, katere želimo prevesti, in ime izhodne izvršljive datoteke. Poleg slednjih obstaja še mnogo parametrov prevajanja, poglavje Ker z miškinim gumbom parametrov ne moremo podati, je potrebno uporabiti CLI. Ko odpremo CLI, vnesemo ime katerega koli programa, vključenega v distribuciji Xubuntu 11.04, ter pritisnemo Enter. S tem zaženemo program. V primeru, da bi želeli odpreti program Thunar, ki je program za upravljanje z datotekami, v CLI vnesemo ukaz thunar. Predpostavka, da bi po istem principu lahko v CLI z ukazom arm-none-eabi-gcc zaganjali programe razvojne verige, se izkaže za napačno in v vednost nam CLI vrne opozorilo. arm none eabi gcc : command not found To opozarja, da OS ukaza ni našel. Ob vnosu ukaza OS išče istoimenski program na standardnih naslovih, med katerimi ni naslova, /home/ziga/projects/cs_lite/bin, kjer se nahaja program arm-none-eabi-gcc. Alternativno lahko ukazu predpnemo njegov absloutni naslov. Primer takega ukaza je spodnji ukaz, ki vrne drugačne vrste opozorilo. /home/ z i g a / p r o j e c t s / c s l i t e / bin /arm none eabi gcc arm none eabi gcc : no input f i l e s Besedilo opozarja, da je OS uspelo zagnati program arm-none-eabi-gcc, vendar ta ni mogel narediti ničesar, ker mu nismo podali parametrov, poglavje Ker je predpenjanje absolutnega naslova nerodno in zamudno, absolutni naslov raje dodamo med standardne naslove, kjer OS išče ob vnosu ukaza. Nekaj standardnih naslovov je zajetih v okoljski spremenljivki PATH, v katero s prvim ukazom dodamo absolutni naslov razvojne verige in z drugim ukazom poskrbimo, da je posodobljena spremenljivka PATH dosegljiva vsem procesom, ki trenutno tečejo na OS. PATH=${PATH}:/ home/ z i g a / p r o j e c t s / c s l i t e / bin / export PATH V prvem ukazu na levi strani enačaja stoji ime okoljske spremenljivke, ki ji želimo dodati naslov. Na desni strani enačaja stoji ${PATH}, kjer $ pove, da je {PATH} spremenljivka, zaviti oklepaj ima vlogo navadnega oklepaja in ni obvezen. Del ${PATH} je obvezen, saj poskrbi, da se na tem mestu razširi vrednost spremenljivke PATH. To pomeni, da se na mesto, kjer stoji ${PATH}, prekopirajo vsi standardni naslovi, v katerih OS išče ukaze. V nasprotnem primeru bi vse standardne naslove v spremenljivki PATH nadomestili z enim samim, s /home/ziga/projects/cs_lite/bin/. S tem OS ne bi več našel programov, potrebnih za nemoteno delovanje. Sledi :, s katerim so ločeni naslovi v okoljski spremenljivki PATH. To lahko preverimo z ukazom printenv, ki izpiše vse okoljske spremenljivke, slika 5.4, ali echo $PATH, ki izpiše le okoljsko spremenljivko PATH, v kateri se mora nahajati tudi naslov /home/ziga/projects/cs_lite/bin/. 40

41 Slika 5.4: Ukaz printenv in okoljske spremenljivke, izmed katerih je ena PATH. Slednja vsebuje naslove, na katerih OS išče ukaze. Naslove ločuje :. Sedaj lahko v CLI vpišemo ime katerega koli programa na naslovu /home/ziga/projects- /cs_lite/bin/ in ga s tem zaženemo. Če želimo izvedeti več o uporabi programov, njihovim ukazom pripnemo parameter --help, ki za izbrani program izpiše vse možne parametre in načine uporabe. arm none eabi gcc help Zdi se, da vse deluje brezhibno, vendar pa bi se ob ponovnem zagonu OS okoljska spremenljivka PATH prednastavila nazaj na prvotno vrednost in OS zopet ne bi našel programov razvojne verige. S tem namenom v OS Linux obstaja datoteka.bashrc 38, ki vsebuje vse ukaze, katere uporabnik želi izvesti ob zagonu. Datoteka se nahaja na naslovu /home/ziga/ 39, odpremo pa jo s spodnjim ukazom, ki zahteva vpis uporabniškega gesla, izbranega med nastavitvijo Xubuntu 11.04, slika 4.2(g). sudo g e d i t /. bashrc Ukaz sudo pomeni, da želimo uporabniške privilegije 40, s katerimi lahko urejamo zaščitene datoteke. gedit je ukaz za odpiranje tekstovnega urejevalnika Gedit, ki posledično odpre datoteko.bashrc. Da bi se naslov /home/ziga/projects/cs_lite/bin/ ob vsakem zagonu dodal v okoljsko spremenljivko PATH, dodamo spodnja dva ukaza na konec datoteke.bashrc. PATH=${PATH}:/ home/ z i g a / p r o j e c t s / c s l i t e / bin / export PATH Lahko uporabimo tudi krajšo različico. export PATH=${PATH}:/ home/ z i g a / p r o j e c t s / c s l i t e / bin / Datoteko.bashrc nato shranimo in zapremo, s čimer je končana namestitev razvojne verige Sourcery CodeBench Lite. 38. pred datoteko ali mapo v Linuxu pomeni, da je mapa ali datoteka skrita. Skrite datoteke v programu Thunar prikažemo s kombinacijo tipk Control + H. V CLI isto storimo tako, da se premaknemo v vsebujočo mapo in vpišemo ukaz ls -la, kar prikaže vse datoteke v dolgem izpisu. 39 Naslov /home/ziga/ je naslov glavne uporabniške mape, katerega v Linuxu nadomestimo z. 40 Za pridobivanje uporabniških privilegijev je vedno potreben vpis gesla. 41

42 5.1.3 Prevajanje in povezovanje enostavnega projekta Sledi opis postopka prevajanja in povezovanja C-projekta z uporabo orodij razvojne verige Sourcery CodeBench Lite, slika 5.5. Opisan je konkreten projekt, ki je preprost in na MCU ne pusti vidnega rezultata [24]. Tak primer je nujen za razumevanje postopka prevajanja in ne zahteva znanja programskih jezikov, saj se opis ne poglablja v vsebino vhodnih datotek, slika 5.5. Slika 5.5: Postopek prevajanja in povezovanja C-izvornih datotek z orodji razvojne verige Sourcery CodeBench Lite. Pri prevajanju C-projektov je končni rezultat program, v našem primeru executable_elf, ki je rezultat prevajanja in povezovanja, v katerem sodelujejo trije tipi vhodnih datotek. Vedno obstaja ena ali več datotek s končnico.c, v našem primeru main.c. Končnica.c pomeni, da so datoteke pisane v C-programskem jeziku. Vedno obstaja tudi zagonska datoteka, v našem primeru startup.s, ki nosi končnico.s. Slednja pove, da je datoteka pisana v ARM zbirniku. Zadnja datoteka je povezovalna skripta, v našem primeru linker_script.ld s končnico.ld. Povezovalna skripta poskrbi za pravilno razporejanje objektnih datotek, nastalih v koraku prevajanja, slika 5.5 [25, str. 159]. Za začetek odpremo program Thunar in ustvarimo mapo /home/ziga/projects/test, znotraj katere ustvarimo datoteko startup.s, datoteka 5.1. V isti mapi ustvarimo datoteko main.c, datoteka 5.2, in datoteko linker_script.ld, datoteka

43 1. s e c t i o n INTERRUPT VECTOR, x 2. g l o b a l R e s e t 3. g l o b a l i m a g e s i z e 4 5. t e x t 6. code a l i g n B R e s e t / zacetek glave / word 0 x41676d word 0, 0, 0, 0, image type : 17. word 0 x a sizeofpermanentcode : 20. word ( i m a g e s i z e ) 21. word 0,0 22 bootparameter : 23. word word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, / konec glave / Reset : 29 B Reset Handler 30 B. 31 B. 32 B. 33 B. 34 B. 35 B. 36 B Reset Handler : 39 LDR sp, =stack top 40 BL c e n t r y 41 B. Datoteka 5.1: startup.s 1 int c e n t r y ( ) { 2 return 0 ; 3 } Datoteka 5.2: main.c 1 ENTRY( R e s e t ) 2 3 SECTIONS{ 4 5. = 0 x ; 6 7. t e x t : { 8 PROVIDE( z a c e t e k =. ) ; 9 s t a r t u p. o (INTERRUPT VECTOR) ; 10 (. t e x t ) ; 11 } data : { 14 (. data ) ; 15 } bss : { 18 (. bss ) ; 19 PROVIDE( k o n e c =. ) ; 20 } s t a c k t o p =. ; i m a g e s i z e = ( ( z a c e t e k k o n e c ) + 511) & ; } Datoteka 5.3: linker script.ld Ko so vse vhodne datoteke pripravljene, lahko nadaljujemo s korakom prevajanja. Najprej odpremo CLI in se premaknemo na naslov /home/ziga/projects/test, kjer se nahajajo vhodne datoteke. cd /home/ z i g a / p r o j e c t s / t e s t 43

44 S spodnjim ukazom prevedemo izvorno zagonsko datoteko startup.s in takoj opazimo, da se v mapi pojavi objektna zagonska datoteka startup.o. arm none eabi as mcpu=arm926ej s c Wall ostartup. o startup. s Zgornji ukaz je sestavljen iz treh glavnih delov. Skrajni levi del je ime programa oz. prevajalnika za prevajanje ARM zbirnika, skrajni desni del je relativni naslov do izvorne datoteke, katero želimo prevesti. Ker se trenutno nahajamo v isti mapi kot datoteka, naslov zapišemo kot startup.s. Če bi se nahajali na naslovu /home/ziga/projects, bi morali skrajni desni del zapisati kot./test/startup.s, kjer. pomeni trenutni naslov. Osrednji del je nabor parametrov: -mcpu=arm926ej-s Določi arhitekturo MCPU, za katero se prevaja. -c Onemogoči povezovanje objektnih datotek, nastalih s prevajanjem. -Wall Omogoči vsa opozorila, ki nastajajo med prevajanjem. To je priporočljivo zaradi lažjega iskanja napak. -o Za tem parametrom navedemo ime izhodne datoteke. Nabor parametrov je obsežen in ponuja mnogo možnosti kombiniranja s prevajalniki in povezovalniki. Podrobnejši opisi prevajalnikov, povezovalnikov in parametrov so prosto dostopni [26, 27, 28, 29], saj razvojna veriga Sourcery CodeBench Lite izhaja iz razvojne verige GCC, zaščitene pod licenco GNU GPL. S spodnjim ukazom prevedemo še izvorno C-datoteko main.c in na izhodu dobimo objektno datoteko main.o. arm none eabi gcc mcpu=arm926ej s c Wall omain. o O3 mapcs frame mno sched p r o l o g mno thumb interwork fno hosted gdwarf 2 main. c Pri prevajanju izvorne C-datoteke v naboru parametrov uporabimo nove parametre: -O3 Izbere največjo stopnjo optimizacije kode, kar pomeni, da prevajalniku dovolimo tudi prenaslavljanje spremenljivk. -mapcs-frame Ustvari okvirček sklada ustrezen ARM procuderalnemu klicnemu standardu (APCS). -mno-sched-prolog Prepreči mešanje ukazov v uvodnem delu oz. prologu funkcij. To pomeni, da pred vsako funkcijo stoji prepoznavno zaporedje ukazov, ki jih lahko lociramo tudi po tem, ko je program že preveden. -mno-thumb-interwork Prepreči klice med 32-bitnim ARM procesiranjem in 16-bitnim Thumb procesiranjem. -fno-hosted Opozori prevajalnik, da prevajanje poteka v okolju, kjer ne obstajajo standardne C-knjižnice 41 in se C-program ne začne na vstopni točki oz. funkciji main, kot je to značilno za klasične programe, pisane za PC. Iz vrstice 15 v datoteki startup.s, datoteka 5.1, program namreč skoči na vstopno točko oz. funkcijo c entry, ki se nahaja v vrstici 1 datoteke main.c, datoteka gdwarf-2 Narekuje, naj bo format, v katerem razhroščevalnik vrača informacije, enak formatu DWARF2. 41 Zbirke objektnih datotek. 44

45 Sedaj, ko imamo objektni datoteki startup.o in main.o, s spodnjim ukazom zaženemo povezovalnik, ki poveže objektni datoteki in vrne izvršljivo datoteko executable_elf. arm none eabi ld o e x e c u t a b l e e l f s t a t i c T l i n k e r s c r i p t. ld startup. o main. o V zgornjem ukazu je potrebno objekte navesti skrajno desno in v vrstnem redu v katerem naj bi tekel izvršljiv program. V naboru parametrov zopet uporabimo nekaj novih parametrov: -static Povezovalniku prepove povezovenje z dinamičnimi knjižnicami. -T Za tem parametrom navedemo relativni naslov do povezovalne skripte. S spodnjim ukazom preverimo format izvršljive datoteke executable_elf. f i l e e x e c u t a b l e e l f Ker ugotovimo, da je datoteka v 32-bitnem ELF-formatu, lahko uporabimo naslednji ukaz, ki prikliče program arm-none-eabi-readelf, specializiran za branje ELF-formata. arm none eabi r e a d e l f h e x e c u t a b l e e l f S parametrom -h pridobimo spodaj nanizane podatke, shranjene v glavi ELF-datoteke, katere bomo potrebovali pri spreminjanju formata, poglavje Če želimo vse podatke o ELF datoteki, lahko parameter -h zamenjamo s parametrom -a. ELF Header : Magic : 7 f 45 4c Class : ELF32 Data : 2 s complement, l i t t l e endian Version : 1 ( c u r r e n t ) OS/ABI : UNIX System V ABI Version : 0 Type : EXEC ( Executable f i l e ) Machine : ARM Version : 0x1 Entry point address : 0x Start of program headers : 52 ( bytes into f i l e ) S t a r t o f s e c t i o n headers : 4744 ( bytes i n t o f i l e ) Flags : 0x , has entry point, Version5 EABI S i z e o f t h i s header : 52 ( bytes ) Size of program headers : 32 ( bytes ) Number of program headers : 1 S i z e o f s e c t i o n headers : 40 ( bytes ) Number o f s e c t i o n headers : 14 Section header s t r i n g table index : Priprava in nalaganje izvršljive datoteke na mikrokrmilnik preko USB Izvršljiva datoteka executable_elf je v formatu ELF, kar ni ustrezno za nalaganje preko USB DFU protokola, za katerega se uporablja format EBN [15, str ]. Za spreminjanje formata lahko uporabimo program arm-none-eabi-objcopy [29, str ], ki vhodno datoteko kopira, na kopiji opravi spremembe formata in shrani izhodno datoteko v novem formatu. Če želimo ELF-format prekopirati v običajni binarni format po imenu executable_bin, je potrebno uporabiti spodnji ukaz. 45

46 arm none eabi objcopy I e l f 3 2 l i t t l e a r m Obinary s t r i p a l l verbose e x e c u t a b l e b i n e x e c u t a b l e e l f Pri spreminjanju formata uporabimo nekaj novih parametrov: -I Določi format vhodne datoteke oz. elf32-littlearm. -O Določi format izhodne datoteke oz. binary. --strip-all Vhodnemu formatu odstrani nepotrebne sektorje. --verbose V CLI izpiše informacijo o spremembi formata. Datoteka executable_bin je v binarnem formatu, a še vedno ni pripravljena za nalaganje preko USB DFU protokola. Slednji veleva, da mora biti format razdeljen na sektorje v velikosti 2048 bajtov [15, str. 94]. Datoteko executable_bin lahko razdelimo na sektorje velikosti 2048 bajtov s programom unsimgcr, čigar lastnik je podjetje NXP. Program je dosegljiv na spletni strani LPCLinux [30], kjer v zgornjem meniju sledimo povezavi Downloads in v razdelku LPC313x Packages prenesemo Linux različico programa, slika 5.6. Slika 5.6: LPC313x Packages razdelek strani LPCLinux, kjer lahko prenesemo razne pripomočke za LPC3141. Ko je program prenešen, ga skopiramo v mapo /home/ziga/projects/unsimgcr in se s spodnjim ukazom tudi sami premaknemo v vsebujočo mapo. cd /home/ z i g a / p r o j e c t s / unsimgcr Če uporabimo ukaz ls -l v izpisu, rw r r 1 z i g a z i g a :51 unsimgcr opazimo, da program unsimgcr nima privilegijev za izvajanje, kar je razvidno iz skrajnega levega dela, kjer bi namesto -rw-r--r-- 42 morali imeti -rwxrwxrwx. To spremenimo 42 Oznaka r pomeni branje, angleško read. Oznaka w pomeni pisanje, angleško write. Oznaka x pomeni izvajanje, angleško execute. Vsaka izmed oznak se pojavi trikrat, saj določa pravice lastnika datoteke, članov skupine, ki si lasti datoteko, in vseh ostalih. 46

47 s spodnjim ukazom, ki programu unsimgcr dodeli vse privilegije. chmod 777 unsimgcr Sedaj, ko ima program unsimgcr vse privilegije, ga je, tako kot programe iz razvojne verige Sourcery CodeBench, potrebno dodati pod okoljsko spremenljivko PATH. To storimo s spodnjima ukazoma. PATH=${PATH}:/ home/ z i g a / p r o j e c t s / unsimgcr export PATH Potrebno je poskrbeti, da se zgornja ukaza izvedeta tudi ob vsakem zagonu, zaradi česar s spodnjim ukazom odpremo datoteko.bashrc sudo g e d i t /. bashrc Ukaz PATH=${PATH}:/home/ziga/projects/unsimgcr nato dodamo na konec datoteke, vendar pred ukaz export PATH. S tem je program unsimgcr uspešno naložen. Uporabimo spodnji ukaz in se premaknemo v mapo, kjer se nahaja datoteka executable_bin. cd /home/ z i g a / p r o j e c t s / t e s t Z ukazom unsimgcr pokličemo program unsimgcr. Ukazu dodamo parameter -pd, s katerim datoteko executable_bin razdelimo na sektorje v velikosti 2048 bajtov, stran 46, in jo shranimo pod imenom executable_bin_usb 43. unsimgcr pd e x e c u t a b l e b i n e x e c u t a b l e b i n u s b Datoteka executable_bin_usb je sedaj pripravljena za nalaganje v LPC3141, vendar Xubuntu nima predhodno nameščenega programa za nalaganje USB DFU združljivih datotek na MCU. S tem namenom uporabimo ukaz apt-get, ki pokliče program Aptitude, namenjen nameščanju programov preko spleta, in s spodnjim ukazom namestimo program dfu-util [31, 32]. sudo apt get i n s t a l l dfu u t i l Naslednji korak je povezava vgrajenega sistema, ki vsebuje LPC3141, s PC in nato uporaba programa dfu-util za nalaganje datoteke executable_bin_usb v LPC3141. V diplomi je uporabljen vgrajeni sistem EA3141 [33] z dokupljenim LCD [34]. EA3141 povežemo s PC preko dveh USB kablov. Prvi služi napajanju in drugi programiranju preko USB DFU protokola, slika 5.7(a). Pred nalaganjem datoteke executable_bin_usb moramo poskrbeti, da se med zagonskim postopkom LPC3141 prebudi v zagonski način USB DFU. To storimo z nastavljanjem pinov GPIO0=0, GPIO1=1 in GPIO2=0, poglavje Pini so na EA3141 nastavljivi preko stikal BOOT0=L, BOOT1=H in BOOT2=L, ki jih je potrebno premakniti v točno določen položaj, slika 5.7(b). 43 Če v zagonski datoteki startup.s, datoteka 5.1, v vrrsticah ne bi vnesli predpisane glave [15, str. 85], nam program unsimgcr vrne napako Inappropriate file size. 47

48 (a) (b) Slika 5.7: (a) Povezava EA3141 s PC in (b) nastavitev USB DFU zagonskega načina. Če je izbrani zagonski način USB DFU pravilno nastavljen, lahko v CLI s spodnjim ukazom prepoznamo LPC3141, vgrajen na EA3141. Pomemben je odziv Found Runtime. dfu u t i l l dfu u t i l 0. 7 Found Runtime : [ : df55 ] devnum=0, c f g =1, i n t f =0, a l t =0, name= UNDEFINED Found Runtime : [ 1235: 800 a ] devnum=0, cfg =1, i n t f =5, a l t =0, name= UNDEFINED Found Runtime : [ 1235: 800 a ] devnum=0, cfg =1, i n t f =5, a l t =0, name= UNDEFINED Če zgornji ukaz vrne več zadetkov, moramo najprej identificirati LPC3141. Pomagamo si z ukazom lsusb, ki izpiše seznam vseh naprav, priklopljenih preko USB. Če smo LPC3141 pravilno priklopili, bi med zadetki morali najti vrstico, podobno spodnji. Bus 003 Device 005: ID 0471: df55 P h i l i p s ( or NXP) LPCXpresso LPC Link Če primerjamo zgornja dva izpisa, opazimo, da je LPC3141 dosegljiv pod identifikacijskim številom 0471:df55. S spodnjim ukazom preko parametra -R prednastavimo LPC3141, s parametrom -t v bajtih določimo velikost sektorjev 2048 bajtov, stran 46, in s parametrom -d izberemo LPC Za parametrom -D izberemo datoteko za prenos v LPC3141 in pritisnemo Enter. sudo dfu u t i l R t2048 d0471 : df55 Dexecutable bin usb Opening USB Device 0x0000 : 0 x Claiming USB DFU Runtime I n t e r f a c e... Determining d e v i c e s t a t u s : s t a t e = dfuidle, s t a t u s = 0 WARNING: Runtime device already in DFU s t a t e?!? Found Runtime : [ 0 x0471 : 0 xdf55 ] devnum=38, c f g =0, i n t f =0, a l t =0, name= UNDEFINED Claiming USB DFU I n t e r f a c e... S e t t i n g A l t e r n a t e S e t t i n g... Determining d e v i c e s t a t u s : s t a t e = dfuidle, s t a t u s = 0 dfuidle, c o n t i n u i n g T r a n s f e r S i z e = 0 x0800 bytes per hash =1597 S t a r t i n g download : [##################################################] f i n i s h e d! s t a t e ( 8 ) = dfumanifest WAIT RESET, s t a t u s ( 0 ) = No e r r o r c o n d i t i o n i s p r e s e n t Done! can t detach : e r r o r sending c o n t r o l message : Broken pipe R e s e t t i n g USB to switch back to runtime mode 44 Ta parameter ni potreben, če ukaz dfu-util -l vrne le eno združljivo napravo. V nadaljevanju diplomsko delo obravnava tak primer in programi ne delujejo če ne odklopimo odvečnih naprav. 48

49 Če nam CLI vrne izpis, podoben zgornjemu, smo na LPC3141 uspešno naložili prvi preprosti program, ki na LPC3141 ne pusti vidnega rezultata. Ker je LPC3141 zaposlen z izvajanjem naloženega programa, ne dopušča programiranja. Zato ga je pred ponovnim nalaganjem potrebno prednastaviti s pritiskom na tipko Reset na EA3141, slika 5.8. Slika 5.8: Tipka Reset za prednastavljanje LPC Makefile Postopek prevajanja, poglavje 5.1.3, in postopek priprave programa za USB DFU nalaganje, poglavje 5.1.4, sta dolgotrajna procesa, zaradi česar ju je potrebno avtomatizirati. Avtomatizacijo izvedemo tako, da omenjena postopka v obliki recepta prepišemo v datoteko, imenovano makefile. Slednjo bomo kasneje klicali s programom make. Za pisanje datoteke makefile je ključnega pomena znanje CLI ukazov [35], povezanih z OS Linux, razvojno verigo Sourcery CodeBench Lite in programom unsimgcr, kar da težo do sedaj naučenim CLI ukazom. Ker je datoteka makefile dokaj zapleten recept z lastno sintakso [36], je najbolje opisati konkretni primer. V mapi, kjer se nahaja datoteka executable_bin_usb, ustvarimo novo datoteko po imenu makefile, datoteka 5.4. Vsaka Linux distribucija vsebuje več lupin, kot npr. bash, sh, dash, ash, dash... Slednje omogočajo vnos CLI ukazov. Ti se od lupine do lupine razlikujejo. S tem razlogom v vrstici 1 datoteke makefile z ukazom SHELL določimo absolutno pot do lupine bash, v kateri smo pisali vse dosedanje CLI ukaze in jo želimo uporabiti tudi pri pisanju ukazov v datoteki makefile. V datoteki makefile obstajajo nazaj razširljive spremenljivke, definirane z uporabo =, in preprosto razširljive spremenljivke, definirane z uporabo := [36, str ]. Vse spremenljivke, definirane v vrsticah 3-24, so definirane z :=, kar pomeni, da jih program make med branjem datoteke makefile razširi le enkrat. Zaradi tega je potrebno v primerih, ko je npr. spremenljivka ROOT vsebovana v spremenljivki INC, paziti, da se 49

50 spremenljivka ROOT nahaja pred spremenljivko INC. 1 SHELL := / bin / bash 2 3 ROOT := $ ( s h e l l pwd) 4 INC := $ (ROOT) / i n c 5 SRC := $ (ROOT) / s r c 6 STR := $ (ROOT) / s t r 7 8 AS := arm none eabi as mcpu=arm926ej s c Wall I $ (INC) I$ (SRC) I$ (STR) 9 CC := arm none eabi gcc mcpu=arm926ej s O3 mapcs frame mno sched prolog fno hosted mno thumb interwork gdwarf 2 c Wall I$ (INC) I$ (SRC) I$ (STR) 10 LDSCRIPT := l i n k e r s c r i p t. l d 11 LD := arm none eabi ld s t a t i c T$(LDSCRIPT) 12 OBJCOPY := arm none eabi objcopy I e l f 3 2 l i t t l e a r m O binary s t r i p a l l v e r b o s e 13 UNSIMGCR := unsimgcr pd EXE1 := e x e c u t a b l e e l f 16 EXE2 := e x e c u t a b l e b i n 17 EXE3 := e x e c u t a b l e b i n u s b HEADERS := $ ( n o t d i r $ ( w i l d c a r d $ (INC) /. h ) ) 20 SOURCES CC := $ ( n o t d i r $ ( w i l d c a r d $ (SRC) /. c ) ) 21 SOURCES AS := $ ( n o t d i r $ ( w i l d c a r d $ (STR) /. S ) ) 22 OBJECTS CC := $ (SOURCES CC :. c =.o ) 23 OBJECTS AS := $ (SOURCES AS :. S=.o ) 24 VPATH := $ (STR) : $ (SRC) : $ (INC) a l l : $ (EXE3) Konec postopka : I z v r s l j i v program $ (EXE3) za USB nalaganje se nahaja v mapi $ (ROOT). 28 $ (EXE3) : $ (EXE2) Dodajanje CRC headerja in k r e i r a n j e programa za USB nalaganje po imenu $ (EXE3). 30 $ (UNSIMGCR) $ (EXE2) $ (EXE3) 31 $ (EXE2) : $ (EXE1) Prevajanje programa $ (EXE1) i z formata elf32 l i t t l e a r m v binarni format po imenu $ (EXE2). 33 $ (OBJCOPY) $ (EXE1) $ (EXE2) 34 $ (EXE1) : $ (OBJECTS AS) $ (OBJECTS CC) Objekti so : $ (OBJECTS AS) $ (OBJECTS CC) Headerji so : $ (HEADERS) Linkanje o b j e k t o v v i z v r s l j i v program po imenu $ (EXE1). 38 $ (LD) o $@ $ˆ /home/ z i g a / p r o j e c t s / c s l i t e /arm none e a b i / l i b / l i b c. a /home/ z i g a / p r o j e c t s / c s l i t e / l i b / gcc /arm none e a b i / / l i b g c c. a 39 %.o : %.S Prevajanje assembly i z v o r n i h datotek. 41 $ (AS) o $@ $< 42 %.o : %.h %.o : %.c P r e v a j a n j e c i z v o r n i h datotek. 46 $ (CC) o $@ $< 47 %.o : %.h PHONY : c l e a n 50 c l e a n : Brisanje objektov. 52 rm. o B r i s a n j e i z v r s l j i v i h programov. 54 rm $ (EXE1) 55 rm $ (EXE2) 56 rm $ (EXE3) Datoteka 5.4: makefile V vrstici 3 pod ROOT shranimo trenutno lokacijo, ki je spremenljivka. Zaradi tega jo predpnemo s simbolom $. Trenutno lokacijo v CLI izpišemo z ukazom pwd, ki v datoteki makefile ne deluje, če ga ne uporabimo skupaj s funkcijo shell. Slednja prenese ukaz iz datoteke makefile v CLI in vrne rezultat v makefile. V vrsticah 4-6 pod INC, SRC in STR definiramo podmape trenutne lokacije ROOT. Podmape poimenujemo inc, src in str. Če bi se datoteka makefile nahajala v mapi /home/ziga/projects/test, bi se v spremenljivke shranile naslednje vrednosti: ROOT=/home/ z i g a / p r o j e c t s / t e s t INC=/home/ z i g a / p r o j e c t s / t e s t / inc SRC=/home/ z i g a / p r o j e c t s / t e s t / s r c STR=/home/ z i g a / p r o j e c t s / t e s t / s t r V vrsticah 8-13 so pod AS, CC, LD, OBJCOPY in UNSIMGCR definirani že znani ukazi, medtem ko je pod LDSCRIPT definiran relativni naslov do povezovalne skripte linker_script.ld, datoteka 5.3. Uporabljen je nov parameter: 50

51 -I Pove prevajalnikom, na katerih lokacijah naj iščejo vhodne datoteke. V našem primeru so to podmape inc, src in str. V vrsticah določimo poljubna imena za datoteke, ki nastanejo med prevajanjem in pripravljanjem programa na USB DFU nalaganje. Vrstice poiščejo in sestavijo tri sezname izvornih datotek, slika 5.5, kjer vsak izmed seznamov vsebuje imena datotek s točno določeno končnico.c,.s 45 ali.h 46. Pri nastajanju seznama, npr. SOURCES_CC, funkcija wildcard [36, str. 85] v podmapi src s pomočjo simbola * 47 poišče vse datoteke s končnico.c. Najdene datoteke skupaj z njihovimi relativnimi naslovi naniza v seznam in jih loči s presledki.. / s r c / datoteka1. c. / s r c / datoteka2. c. / s r c / datoteka2. c Ker so datoteke v seznamu predpisane z relativnimi naslovi, je slednje potrebno odstraniti s funkcijo notdir [36, str. 83], ki pusti le datotečna imena, ločena s presledki. datoteka1. c datoteka2. c datoteka3. c Vrstici 22 in 23 vsem elementom s seznamov SOURCES_CC in SOURCES_AS spremenita končnice v.o in ustvarita dva seznama, imenovana OBJECTS_CC in OBJECTS_AS. Slednja združena tvorita seznam vseh objektnih datotek. Vrstica 24 z ukazom VPATH [36, str. 25] navede vse lokacije, kjer program make išče vhodne datoteke oz. sestavine za pripravo izvršljivega programa, primernega za USB DFU nalaganje. Vrstice imajo vlogo recepta, ki je razdeljen na pravila, kot je npr. spodnje. %.o : Prevajanje c i z v o r n i h datotek. $ (CC) o $@ $< V prvi vrstici vsakega pravila se nahaja :. Vsebino na levi strani : imenujemo cilj, medtem ko vsebino na desni strani imenujemo potrebščine. Da lahko dosežemo cilj, potrebujemo potrebščine, katere primerno pripravimo s pomočjo podpravil. V zgornjem primeru imamo dve podpravili, ki morata biti zamaknjeni za en tabulator 48, da ju program make prepozna kot Prevajanje c i z v o r n i h datotek. $ (CC) o $@ $< Recept zaradi lažjega razumevanja začnemo brati od spodaj navzgor. Pravilo v vrstici 47 programu make pove, da za sestavo cilja, v tem primeru %.o 49, potrebuje zaglavne datoteke. Ker slednjih pri prevajanju ni potrebno posebej podati prevajalniku, to pravilo nima podpravil. 45 Končnica.S označuje isti tip datotek, kot do sedaj uporabljena končnica.s, vendar slednja ni prepoznavna v IDE Eclipse, v katerega kasneje vključimo makefile, poglavje Zaglavne datoteke, angleško tudi headers ali header files, s končnico.h, so datoteke, v katerih so zaradi večje preglednosti shranjeni univerzalni deli izvornih datotek. 47 Simbol * nadomesti poljuben niz znakov [35, str. 32]. 48 Zamik za en tabulator dosežemo z enkratnim pritiskom na tipko Tab. 49 Simbol % ima podobno vlogo kot simbol * v funkciji wildcard, stran 51, vendar niza eno datoteko na enkrat in se ponovi tolikokrat, kolikšno je število datotek. Posledično se ponovijo tudi vsa podpravila znotraj pravila. 51

52 Drugače je v pravilu z začetkom v vrstici 44, ki programu make pove, da za sestavo nekaterih objektnih datotek potrebuje izvorne datoteke s končnico.c. Ker je slednje potrebno podati prevajalniku, v vrstici 46 napišemo podpravilo. Slednje s spremenljivko CC kliče ukaz za prevajalnik, nato za parametrom -o z ukazom $@ 50 [36, str. 112] naniza objektne datoteke in na koncu z ukazom $< 51 [36, str. 113] naniza izvorne datoteke. Znotraj istega pravila je še eno podpravilo, ki z v CLI izpiše tekst ali spremenljivke na svoji desni strani. Pravili z začetkom v vrsticah 42 in 39 ne potrebujeta dodatne razlage. Cilj pravila v vrstici 34 je izvršljiva datoteka executable_elf, ki nastane iz potrebščin, v tem primeru vseh objektnih datotek, katere z ukazom $ˆ52 [36, str. 113] v vrstici 38, posredujemo povezovalniku. Poleg objektnih datotek povezovalniku posredujemo tudi absolutne lokacije do osnovnih C knjižnic libc.a in libgcc.a, vključenih v razvojni verigi Sourcery CodeBench Lite. Cilj pravila v vrstici 31 je izvršljiva datoteka executable_bin, ki nastane tako, da potrebščino, v tem primeru executable_elf, s podpravilom v vrstici 33, posredujemo programu arm-none-eabi-objcopy, ki spremeni njen format. Pravilo v vrstici 28 iz potrebščine, ki je v tem primeru executable_bin, s programom unsimgcr pripravi cilj, executable_bin_usb. Zadnje pravilo se nahaja v vrstici 26, njegov cilj pa je ukaz all, ki je odvisen le od potrebščine executable_bin_usb. Ko program make prebere ukaz all, zaključi z branjem datoteke makefile. Zato z zadnjim podpravilom v vrstici 27 in v CLI izpišemo lokacijo izvršljive datoteke executable_bin_usb, ki je pripravljena na USB DFU nalaganje. Če želimo uporabiti datoteko makefile za avtomatično prevajanje in pripravo programov, se premaknemo v vsebujočo mapo, v našem primeru /home/ziga/projects/test, in z ukazom make all pokličemo program make. Slednji najprej na trenutni lokaciji poišče datoteko po imenu makefile in znotraj nje zadosti cilju all, ki je datoteka, pripravljena na USB DFU nalaganje. cd /home/ z i g a / p r o j e c t s / t e s t make a l l 50 Ukaz $@ se razširi in prevzame vrednost cilja, ki je sprožil podpravilo. V tem primeru cilj %.o. 51 Ukaz $< se razširi in prevzame vrednost prve potrebščine, oz. potrebščine podane z implicitnim pravilom [36, str. 103]. Eno izmed implicitnih pravil pravi, da pri prevajanju izvorne datoteke npr. datoteka1.c, nastane objektna datoteka datoteka2.o, ki se razlikuje le v končnici. 52 Ukaz $ˆ se razširi in prevzame vrednost vseh potrebščin, v tem primeru seznamov OBJECTS AS in OBJECTS CC, ki skupaj tvorita celoten seznam objektnih datotek, katerega potrebuje povezovalnik. 52

53 Če program make javi napako, se prepričamo, da se vse datoteke s končnico.c nahajajo v podmapi src, vse datoteke s končnico.h v podmapi inc in vse datoteke s končnico.s v podmapi str. Zaradi slednjega je potrebno do sedaj uporabljeno datoteko startup.s, datoteka 5.1, preimenovati v startup.s. Če v CLI vpišemo ukaz make clean, se bo program make osredotočil le na izpolnjevanje cilja clean v vrstici 50. Slednji v podpravilih z ukazom rm odstrani vse objektne datoteke in datoteke executable_elf, executable_bin in executable_bin_usb, ki nastanejo med prevajanjem in pripravljanjem programa. Naša datoteka makefile, datoteka 5.4, ima dva cilja. Prvi je all in drugi clean. Ker slednji nima nobene potrebščine, je to potrebno dodatno navesti z ukazom.phony [36, str. 29] v vrstici ARM zbirnik in zagonska koda Do sedaj uporabljena zagonska datoteka startup.s, datoteka 5.1, je neuporabna za resen projekt. Zato uporabimo novo zagonsko datoteko, v kateri je prvič zahtevano podrobno poznavanje MCU LPC3141, poglavje 3.1.3, MCPU ARM926ej-s, poglavje 3.2 in ARM zbirnika. Priporočeno je prebiranje strokovne literature [17, 37]. Zagonska koda, uporabljena v vseh nadaljnih primerih, je last podjetja NXP in je prosto dosegljiva v zbirki pogosto uporabljenih LPC3141 gonilnikov (CDL). Zbirka CDL je dosegljiva na spletni strani LPCLinux [30], kjer v zgornjem meniju sledimo povezavi Downloads in v razdelku LPC313x Packages prenesemo CDL, slika 5.6. Ko se CDL prenese s spleta, se premaknemo v vsebujočo mapo in v CLI izvršimo ukaz unzip za razširjanje datotek s končnico.zip. cd /home/ z i g a /Downloads unzip l p c 3 x x x c d l. zip Ko je datoteka razširjena, v njeni drevesni strukturi, na naslovu lpc3xxx cdl/csps/lpc- 313x/bsps/ea3131/startup najdemo tri zagonske datoteke, ki so namenjene različnim razvojnim verigam. Zagonska datoteka ea3131_startup_entry.asm je primerna za razvojne verige, ki temeljijo na GCC. To je zapisano v prvem komentarju 53 znotraj datoteke. V datoteki ea3131_startup_entry.asm izbrišemo vse komentarje in ukazne vrstice, ki niso potrebne. Da bi zagonska datoteka delovala v kombinaciji z datoteko makefile, datoteka 5.4, in kasneje z IDE Eclipse, poglavje 5.2.3, jo shranimo kot startup.s, datoteka 5.5. Zagonska datoteka startup.s, datoteka 5.5, je v tesni povezavi s povezovalno skripto linker script.ld, datoteka 5.6, zaradi česar je potrebno istočasno poznavanje obeh. Najbolje je obe datoteki obravnavati kot celoto. 53 Komentarji se v ARM zbirniku začnejo s simbolom ;. Prevajalnik ignorira vse, kar stoji v isti vrstici desno od ;. 53

54 g l o b a l s t a r t 4. g l o b a l a r m e j s r e s e t 5. g l o b a l d c a c h e f l u s h 6. g l o b a l g n u b s s s t a r t 7. g l o b a l g n u b s s e n d 8. g l o b a l i m a g e s i z e EQU MODE USR, 0 x EQU MODE FIQ, 0x EQU MODE IRQ, 0x EQU MODE SVC, 0 x EQU MODE SVC NI, 0x0D3 16.EQU MODE ABORT, 0x EQU MODE UNDEF, 0x01b 18.EQU MODE SYSTEM, 0 x01f 19.EQU MODE BITS, 0 x01f 20.EQU I MASK, 0x EQU F MASK, 0x EQU IF MASK, 0x0C EQU BROM MMU BASE ADDR, 0x1201C EQU MMU DISABLE MASK, 0xFFFFEFFA 27.EQU MMU ENABLE MASK, 0 x EQU FIQ STACK SIZE, EQU IRQ STACK SIZE, EQU ABORT STACK SIZE, EQU UNDEF STACK SIZE, EQU SYSTEM STACK SIZE, t e x t 36. code a l i g n s t a r t : 40 arm926ejs reset : 41 B a r m e j s r e s e t h a n d l e r word 0 x41676d word 0, 0, 0, 0, 0 45 image type : 46. word 0x A 47 sizeofpermanentcode : 48. word ( i m a g e s i z e ) 49. word 0,0 50 bootparameter : 51. word word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a r m e j s r e s e t h a n d l e r : MOV r0, #MODE SVC NI 57 MSR c p s r c x s f, r MRC p15, 0, r1, c1, c0, 0 60 LDR r2,=mmu DISABLE MASK 61 AND r1, r1, r2 62 MCR p15, 0, r1, c1, c0, MOV r1,#0 65 MCR p15, 0, r1, c8, c7, MCR p15, 0, r1, c7, c7, MRC p15, 0, r1, c1, c0, 0 70 LDR r2,=0 x ORR r1, r1, r2 72 MCR p15, 0, r1, c1, c0, MVN r1, #0 75 MCR p15, 0, r1, c3, c0, LDR r3, =BROM MMU BASE ADDR 78 MCR p15, 0, r3, c2, c0, LDR r5, =invirtmem MRC p15, 0, r1, c1, c0, 0 83 LDR r2,=mmu ENABLE MASK 84 ORR r1, r1, r2 85 MCR p15, 0, r1, c1, c0, MOV pc, r NOP 90 NOP 91 NOP invirtmem : 94 ADR r3, arm926ejs reset 95 SUB r3, r3, #4 96 MOV r1, #IF MASK ORR r0, r1, #MODE FIQ 99 MSR c p s r c x s f, r0 100 MOV sp, r3 101 SUB r3, r3, #FIQ STACK SIZE ORR r0, r1, #MODE IRQ 105 MSR c p s r c x s f, r0 106 MOV sp, r3 107 SUB r3, r3, #IRQ STACK SIZE ORR r0, r1, #MODE ABORT 110 MSR c p s r c x s f, r0 111 MOV sp, r3 112 SUB r3, r3, #ABORT STACK SIZE ORR r0, r1, #MODE UNDEF 115 MSR c p s r c x s f, r0 116 MOV sp, r3 117 SUB r3, r3, #UNDEF STACK SIZE ORR r0, r1, #MODE SYSTEM 120 MSR c p s r c x s f, r0 121 MOV sp, r3 122 SUB r3, r3, #SYSTEM STACK SIZE ORR r0, r1, #MODE SVC 125 MSR c p s r c x s f, r0 126 MOV sp, r LDR r0, = g n u b s s s t a r t 129 LDR r1, = gnu bssend 130 MOV r2, # c l e a r z i : 133 CMP r0, r1 134 BEQ c l e a r z i e x i t 135 STR r2, [ r0 ] 136 ADD r0, r0, #4 137 B c l e a r z i c l e a r z i e x i t : load entry : 142 LDR pc, =c e n t r y 143 NOP d c a c h e f l u s h : 146 CMP r0, #0 147 BNE i n v a l f l u s h o n l y : 150 MRC p15, 0, r15, c7, c10, BNE f l u s h o n l y 152 MOV pc, l r i n v a l : 155 MRC p15, 0, r15, c7, c14, BNE i n v a l 157 MOV pc, l r END Datoteka 5.5: startup.s 54

55 V vrsitcah 3-8 je najprej uporabljen ukaz.global [26, str. 53], ki elemente na svoji desni napravi vidne vsem delnim programom, sodelujočim pri prevajanju kot npr. povezovalnik arm-none-eabi-ld. Ukaz.global je razlog, da se na elemente, definirane znotraj zagonske datoteke, lahko sklicujemo tudi v povezovalni skripti. V vrsticah je s pomočjo ukaza.equ [26, str. 51] definiranih nekaj procesorskih načinov, katere nastavljamo v registru cpsr, poglavje Skrajna desna vrednost je v šestnajstiškem zapisu, kar prevajalnik ARM zbirnika ob prevajanju prepozna zaradi predpone 0x. Šestnajstiška vrednost 0x010 za procesorski način MODE_USR je v bistvu binarno število 0b10000, ki v cpsr določa uporabniški procesorski način, slika V vrstici 24 določimo naslov MMU tabele, poglavje Naslov uporabimo kasneje v vrstici 77, kjer ga s pomočjo ukaza LDR [17, str. 48] shranimo v register r3, slika Tega takoj zatem z ukazom MCR [38] prenesemo v bazni register 0 translacijske tabele. Slednji je vgrajen v koprocesorskem registru p15, poglavje Bazni register 0 translacijske tabele je namenjen shranjevanju naslova translacijske tabele prvega reda [39]. Programi, ki tečejo na LPC3141, v to tabelo shranjujejo virtualne naslove. V vrstici 26 maski MMU_DISABLE_MASK določimo šestnajstiško vrednost 0xFFFFEFFA, katero v vrstici 60 naložimo v register r2. Z omenjeno masko si pomagamo pri izklopu MMU, I-cache in D-cache. Te moramo med zagonom izklopiti, da ne pride do prenaslavljanja naslovov. Za njihov vklop in izklop je zadolžen register p15, natančneje biti 0, 2 in 12. Za izklop morajo biti ti v logičnem stanju 0, poglavje Logično stanje 0 omenjenih bitov dosežemo tako, da v vrstici 59 vrednost p15 z ukazom MRC [38] shranimo v register r1. Nato v vrstici 61 z ukazom AND [17, str. 55] na registrih r1 in r2 opravimo operacijo bitni in 54, slika 5.9, ter rezultat shranimo nazaj v register r1. Ker so v registru r2 biti 0, 2 in 12 enaki 0, so posledično enaki 0 tudi istoležni biti v rezultatu shranjenem v register r1. Ko v vrstici 62 z ukazom MCR vrednost registra r1 shranimo nazaj v register p15, dejansko izklopimo MMU, I-cache in D-cache. Slika 5.9: Operacija bitni in. 54 Operacija bitni in primerja istoležne bite dveh registrov in vrne rezultat, ki je logična 1, le, če sta oba istoležna bita dveh registrov v stanju logične 1. 55

56 MMU, I-cache in D-cache ne smejo ostati izklopljeni in jih je potrebno vklopiti preden program skoči iz zagonske kode na C-kodo. Skok se zgodi v vrstici 142, kjer v register pc, poglavje 3.2.1, naložimo naslov funkcije c_entry, datoteka 5.2. V vseh nadaljnjih primerih bo to glavna funkcija C-kode. Lahko bi rekli, da je celotna C-koda le funkcija, katero kliče zagonska koda. Za ponovni zagon MMU, I-cache in D-cache v vrstici 27 najprej definiramo masko MMU_ENABLE_MASK. Binarno gledano je slednja negativ maske MMU_DISABLE_MASK. To pomeni, da so le biti 0, 2 in 12 v logičnem stanju 0, medtem ko so ostali v logičnem stanju 1. Ponovni vklop poteka v vrsticah 82-85, njegov potek pa je podoben kot pri izklopu. Ključna razlika je v vrstici 84, kjer namesto operacije bitni in z ukazom ORR [17, str ] uporabimo operacijo bitni ali 55. V vrsticah določimo velikosti skladov za posamezne procesorske načine, slika Največ prostora potrebuje administratorski način označen s SVC, katerega nastavljamo kot zadnjega v vrsticah Ima nedefinirano velikost sklada. Sledi mu prekinitveni način, označen z IRQ, takoj za njim pa hitro prekinitveni način, označen z FIQ. Prekinitvam je namenjen velik delež prostora, ker se med izvajanjem prekinitve lahko pojavi nova prekinitev 56. Posledično mora imeti MCPU dovolj prostora, da shrani podatke za ponovno vzpostavitev stanja pred prekinitvami. Pri povezovanju objektnih datotek povezovalna skripta ukaze znotraj objektov prerazporedi v različne sekcije [28, str. 42]. Nastane izvršljiva datoteka, v kateri se deli kode ne nahajajo na prvotnih naslovih. Prerazporejanje preko kriterijev določi, v katero sekcijo spadajo določeni deli kode:.text Sekcija, ki hrani strojne ukaze. Sem spadajo vrstice rodata Sem spadajo konstante in definicije direktive v vrsticah data Sekcija, namenjena branju in pisanju, ki hrani initializirane spremenljivke 57..bss Sekcija, namenjena branju in pisanju, ki hrani neinitializirane spremenljivke 58. V vrstici 35 z ukazom.text [40, str. 3] povezovalni skripti povemo, kje bo začetek.text sekcije. Vrstico nižje z ukazom.code 32 [40, str. 3] izberemo 32-bitno ARM procesiranje in ne 16-bitno Thumb procesiranje. Nato v vrstici 37 z ukazom.align 2 [41] izberemo poravnavo naslovov na 4 bajte oz. 32 bitov 59. V vrsticah 39, 40, 45, 47, 50, 54, 93, 132, 139, 141, 145, 149 in 154 so definirane labele, ki se vedno končajo z :. Na labele se vedno lahko sklicujemo v izvorni datoteki, v kateri je labela definirana. Če na labeli uporabimo ukaz.global, kot v vrsticah 3-8, se nanjo lahko sklicujemo tudi v drugih izvornih datotekah. Labela privzame naslov ukaza za njo in ne zavzame prostora v pomnilniku. 55 Operacija bitni ali primerja istoležne bite dveh registrov in vrne rezultat, ki je logična 1, če je vsaj eden izmed istoležnih bitov v stanju logična Prekinitvi znotraj prekinitve rečemo vgnezdena prekinitev. 57 Spremenljivke, katerim določimo tip in vrednost. 58 Spremenljivke, katerim določimo tip in ne tudi vrednosti. 59 Število bajtov izračunamo tako, da število 2 v ukazu.align 2 postavimo v potenco nad dvojiško osnovo. Primer je 2 2 = 4, kjer se naslove poravnava na 4 bajte. V primeru ARM926ej-s je velikost 4 bajtov oz. 32 bitov ravno velikost spremenljivke tipa word [42]. 56

57 Ukaz.global uporabimo tudi na labeli start, definirani v vrstici 39. To nam omogoči, da isto labelo nato uporabimo znotraj povezovalne skripte, kjer v vrstici 3 z ukazom ENTRY najprej nastavimo vstopno točko povezovalne skripte na labelo start in kasneje v vrstici 7 z ukazom določimo, da bo vstopna točka oz. labela start na naslovu 0x To je v skladu z navodili proizvajalca MCU [15, str. 83]. V vrsticah se na naslovu 0x začne glava programa, ki mora biti v skladu z navodili proizvajalca MCU. Elementi v glavi 60 se nahajajo na predpisanih naslovih, ki morajo biti od vstopne točke oddaljeni za točno določeno število bajtov, tabela 5.1. oddaljenost oddaljenost element opis šestnajstiško v bajtih 0x00 0 vektor Ponavadi branching instruction. V našem primeru B arm926ejs reset handler v vrstici 41, ki skoči na labelo arm926ejs reset handler: v vrstici 54 oz. na konec glave. 0x04 4 image magic number Število, ki v računalništvu pove format. V našem primeru je to število 0x41676d69 podano v vrstici 43. Če število prevedemo po ASCII tabeli in upoštevamo little endian, potem dobimo imga [43]. 0x1C 28 tip izvršljive datoteke Število, katerega vrednost 0xA v vrstici 46 pomeni, da se na izvršljivi datoteki ne izvede CRC. 0x20 32 velikost izvršljive datoteke Velikost slike image size, ki se s pomočjo simbolov gnu textstart in gnu bssstart izračuna v vrstici 41 znotraj povezovalne skripte. Zgolj razlika simbolov gnu textstart in gnu bssstart vrne velikost sekcij.text in.data. Velikost celotne slike image size izračunamo po predpisanem obrazcu [15, str. 85]. Tabela 5.1: Tabela nujno potrebnih elementov v glavi programa [15, str. 85]. Ukaz.word 0,0,0,0,0 v vrstici 44 definira pet konstant vrednosti 0 in tipa word. Na tak način nepotrebne elemente v glavi nastavimo na vrednost 0 in poskrbimo, da ostali elementi padejo na predvidene naslove. Nekateri elementi zavzamejo več kot en word. V vrstici 56 konstanto #MODE_SVC_NI z ukazom MOV [17, str. 50] premaknemo v register r0. Vrstico nižje z ukazom MSR cpsr_cxsf, r0 61 [17, str. 75] vrednost registra r0 premaknemo v register cpsr in tako omogočimo administratorski procesorski način z izklopljenimi prekinitvami, slika Ta je najprimernejši za postavljanje skladov za ostale procesorske načine, saj ima izklopljene prekinitve in omogoča nemoten izklop MMU I-cache in D-cache. Izklop teh sledi v že opisanih vrsticah V vrstici 64 sledi nalaganje konstante 0 62 v register r1. V naslednji vrstici register r1 z ukazom MCR p15,0,r1,c8,c7,0 [38] naložimo v register p15 in onemogočimo vse TLB, poglavje Konstanta 0 v registru r1 nam ponovno koristi v vrstici 67, kjer s pomočjo ukaza MCR p15,0,r1,c7,c7,0 [44] počistimo izklopljena I-cache in D-cache. Oba lahko še vedno vsebujeta neveljavne naslove. 60 Elemente v glavi potrebujemo že ob uporabi ukaza unsimgcr, ki vrne napako, če glava ni primerna, stran 47. Kasneje elemente potrebuje tudi ISROM, ki potrdi format in velikost programa ter po potrebi na njem izvede CRC. 61 cxsf pomeni, da prepišemo Control, extension, Status in Flag polja cpsr, poglavje Konstante predznačimo s simbolom #. 57

58 Ko sta I-cache in D-cache čista, v vrsticah ponovno vklopimo I-cache. Vklop poteka tako, da najprej z ukazom MRC p15,0,r1,c1,c0,0 vrednost registra p15 shranimo v register r1. Nato v register r2 naložimo šestnajstiško vrednost 0x Ko v naslednji vrstici na r1 in r2 izvedemo operacijo bitni ali ter rezultat v vrstici 72 shranimo nazaj v register p15, bit 12 v rezultatu poskrbi za vklop I-cache, slika V vrstici 74 v register r1 z ukazom MVN [17, str. 79] naložimo negirano vrednost konstante 0, kar pomeni nalaganje samih enic. Nato v vrstici 75 z MCR p15,0,r1,c3,c0,0 [38] register r1 naložimo v register za nadzor dostopa do domen (DACR) [45]. Ta se nahaja znotraj registra p15. Same enice omogočijo neomejen dostop do vseh domen. V vrstici 80 v register r5 naložimo naslov labele invirtmem. Nanjo skočimo v vrstici 87, kjer vrednost registra r5 naložimo v pc, poglavje Ukaz NOP [17, str. 595] potroši en cikel ARM926ej-s cevovoda. Ker ima ARM926ej-s tristopenjski cevovod [17, str. 32], je za njegovo čiščenje dovolj, da v vrsticah ukaz ponovimo trikrat. V vrstici 94 naslov labele arm926ejs_reset shranimo v register r3 in mu v vrstici 95 z ukazom SUB [17, str. 49] odštejemo 4. Dobimo register r3 z naslovom 0x11028FFC, ki se nahaja tik pred glavo programa. V vrstici 96 v register r1 naložimo masko IF_MASK, ki ima vse bite, razen bitov 6 in 7, enake nič. Omenjena bita služita izklopu prekinitev in hitrih prekinitev preko registra cpsr, poglavje Register r1 bomo uporabljali od vrstice 98 in vse do vrstice 124. Ker ARM926ej-s podpira več procesorskih načinov, mora vsak izmed njih pred preklopom v drugi način shraniti vrednosti svojih ARM registrov. Te shrani v sklad, katerega vrh določa načinu specifični zasenčni sp. Ozavestimo, da je sp splošni izraz za zasenčeni register, ki vedno obstaja v eni izmed oblik sp usr, sp system, sp fiq, sp irq, sp svc, sp undef ali sp abt, slika Vsak izmed naštetih sp določa vrh sklada za svoj procesorski način. Med procesorskimi načini ne sme priti do prepisa podatkov. Za to poskrbimo tako, da vsak sp nastavimo na drug naslov. Razlike med naslovi določajo velikosti skladov za posamezne načine. V vrstici 98 na registru r1 in MODE_FIQ uporabimo operacijo bitni ali ter rezultat v naslednji vrstici z ukazom MSR cpsr_cxsf,r0 premaknemo v register cpsr. S tem nastavimo hitro prekinitveni procesorski način 64. V vrstici 100 register r3 z naslovom 0x11028FFC naložimo v sp fiq in tako nastavimo vrh sklada za hitro prekinitveni način. Ko v naslednji vrstici registru r3 odštejemo vrednost FIQ_STACK_SIZE, v r3 shranimo naslov, katerega uporabimo pri nastavljanju vrha za naslednji sklad... Nastavitev ostalih skladov poteka po istem postopku v vrsticah [46]. Po preklopu v administratorski procesorski način v vrstici 126 sklada ne omejimo 65. Vprašanje: Skladi se bodo očitno nahajali pred glavo. Ali ne bodo pobrisali vrstic 3-37? Odgovor: Ne. Povezovalna skripta te vrstice prerazporedi v sekcijo.rodata in slednjo postavi za sekcijo.text. Ker je vstopna točka povezovalne skripte takoj na začetku, se prerazporejanje zgodi pred nastavitvijo skladov. 63 Šestnajstiško število 0x1000 je v binarni obliki enako 0b Istočasno izklopimo tudi prekinitve in hitre prekinitve. Te zahtevajo menjavo procesorskega načina, kar med nastavljanjem skladov ni dopustno. 65 V administratorskem načinu se izvaja tudi C-program, kateremu namenimu preostanek ISROM. 58

59 V vrsticah počistimo.bss sekcijo, ki lahko tudi po ponovnem zagonu vsebuje globalne neinitializirane spremenljivke prejšnjih programov, stran 56. Najprej v registra r0 in r1 naložimo naslova simbolov gnu_bssstart in gnu_bssend, definiranih v povezovalni skripti. V register r2 naložimo konstanto 0. V vrstici 133 z ukazom CMP r0,r1 [17, str ], primerjamo r0 in r1. V primeru, da sta vrednosti v registrih enaki, bit 30 v registru cpsr skoči v logično 1. V tem primeru ukaz BEQ clearzi_exit v vrstici 134 skoči na labelo clearzi_exit in konča zanko. To pomeni, da je sekcija.bss čista. V kolikor r0 in r1 nista enaka, se ukaz BEQ clearzi_exit ignorira in izvedeta se ukaza v vrsticah 135 in 136. STR r2,[r0] [17, str. 61] shrani vsebino registra r2 na naslov v registru r0. Ker je vsebina registra r2 v našem primeru 0, s tem en naslov.bss sekcije nastavimo na 0. Nato v vrstici 136 naslovu, shranjenem v r0, z ukazom ADD r0,r0,#4 [17, str. 48] prištejemo 4 in z ukazom B clearzi ponovimo postopek. Postopek se ponavlja, dokler se naslova v registrih r0 in r1 ne izenačita. Takrat so celotna sekcija.bss, s tem pa vrednosti neinitializiranih spremenljivk, enake 0. V vrstici 142 zagonska koda skoči na funkcijo c_entry, ki se nahaja v C-izvorni datoteki. Zagonska koda načeloma preskoči nadaljnje vrstice, lahko pa se nanje skličemo kasneje znotraj C-izvorne kode. Preko labele dcache_flush lahko dostopamo do vrstic , ki služijo čiščenju D-cache. Najprej v vrstici 146 z ukazom CMP primerjamo vrednost v registru r0 66 s konstanto 0. V primeru enakosti oz. neenakosti bit 30 v cpsr skoči v logično 1 oz. 0. V primeru logične 1 (r0 = 0) se BNE inval [17, str. 69] ignorira in program se nadaljuje na labeli flushonly. Tu z ukazom MRC p15,0,r15,c7,c10,3 [47] počistimo en element D-cache in preverimo, ali je naslednji element poln. V tem primeru cpsr postavi bit 30 v logično 0 in posledično se v vrstici 151 izvede ukaz BNE flushonly, ki vzpostavi zanko, vse dokler naslednji element ni prazen. To pomeni v celoti izpraznjen D-cache, konec zanke ter vračanje v C-program preko ukaza MOV pc,lr v vrstici 152. V primeru logične 0 (r0 0) ukaz BNE inval skoči na labelo inval. Tu z ukazom MRC p15,0,r15,c7,c14,3 [47] počistimo en element D-cache in preverimo ali je naslednji element poln. V tem primeru cpsr postavi bit 30 v logično 0 in posledično se v vrstici 156 izvede ukaz BNE inval, ki vzpostavi zanko vse dokler naslednji element ni prazen 67. To pomeni v celoti izpraznjen D-cache, konec zanke ter vračanje v C-program preko ukaza MOV pc,lr v vrstici 157. V vrstici 159 ukaz.end določi konec zagonske datoteke. 66 Znotraj C-programa vrednost neke pomnilniške celice naložimo v register r0. 67 Ukaza MRC p15,0,r15,c7,c14,3 in MRC p15,0,r15,c7,c10,3 se razlikujeta le v tem, da prvi na koncu D-cache razglasi za neveljaven. 59

60 5.1.7 Povezovalna skripta Povezovalna skripta je navodilo, po katerem se ravna povezovalnik ob povezovanju objektnih v izvršljivo datoteko. Ker želimo pri povezovanju objektnih datotek, ki bodo nastale iz zagonske kode in C-izvornih datotek, slika 5.5, uporabiti lastno povezovalno skripto, slednjo navedemo za parametrom -T v ukazu za prevajalnik arm-none-eabi-ld, stran 45. Uporaba lastne povezovalne skripte je obvezna, saj znotraj nje v vrsticah 1-3 določimo: OUTPUT_FORMAT Ukaz za določanje formata izvršljive datoteke, kjer se privzame prva možnost - v našem primeru elf32-littlearm, navedena tudi za parametrom -O pri nalaganju izvršljive datoteke v LPC3141, stran 45. Drugi formati so le dodatno podprti [28, str. 41]. OUTPUT_ARCH Ukaz za določanje arhitekture MCPU, kateri je program namenjen [28, str. 45]. V našem primeru arm. ENTRY Ukaz za določanje vstopne točke povezovalne skripte [28, str. 39]. Izbrana je labela start v vrstici 39 zagonske datoteke. Priporočeno je zagonsko datoteko brati tu. Na tem mestu se program začne in takoj vstopi v povezovalno skripto. Ta izvede spodaj opisane ukaze in prerazporedi program. Nato se program vrne v zagonsko datoteko in prebere njen preostanek. Z ukazom SECTIONS [28, str. 48] v vrsticah 5-37 razporedimo sekcije.text,.rodata,.data in.bss. Prva vrstica znotraj SECTIONS nastavi naslovni števec. 68 na naslov 0x Ker je to prvi ukaz v povezovalni skripti, bo ta naslov enak naslovu vstopne točke start. Omenjeni naslov se nahaja znotraj ISRAM, slika 3.5. Za tem ukazom vrednost naslovnega števca inkrementira za 4 in znaša 0x Na naslovu 0x v vrstici 9 začnemo.text sekcijo. Ta je definirana v vrsticah Na njenem začetku stoji labela exidx_start, ki skupaj z labelo exidx_end na koncu sekcije.rodata, omogoča izračun skupne velikosti sekcij.text in.rodata. Ti dve hranita strojne ukaze in konstante 69 in bi lahko bili shranjeni tudi v ISROM. To bi dosegli tako, da bi pred vrstico 9 uporabili ukaz. = 0x ; in s tem preusmerili naslovni števec na začetek ISROM, slika 3.5. V vrsticah 12, 23, 27, 29, 34, 36, 39 in 40 z ukazom PROVIDE [28, str. 46] definiramo simbole. Simboli, tako kot labele, prevzamejo naslov ukaza za njimi. Simbole gnu_bss_start, gnu_bssend in image_size na vrhu zagonske datoteke definiramo kot globalne. Prva dva nato v vrsticah uporabimo za čiščenje.bss sekcije, medtem ko zadnjega uporabimo v vrstici 48, kjer znotraj glave podamo velikost izvršljive datoteke. Tiste, ki jih ne definiramo kot globalne, uporabimo le znotraj povezovalne skripte za določanje velikosti posameznih delov programa. Ključni sta vrstici 13 in 14, kjer najprej z ukazom startup.o(.text.text.*) povezovalniku povemo, naj v.text sekcijo vključi sekcije datoteke startup.o s končnicami.text ali.text.* 70. Sledi ukaz *(.text.text.*), s katerim povezovalniku ukažemo, naj v.text sekcijo vključi sekcije vseh drugih datotek z istimi končnicami. Podobni ukazi so uporabljeni tudi za ostale sekcije, definirane v vrsticah Naslovni števec oz. location counter ni isto kot programski števec pc. Označimo ga s simbolom.. 69 Konstante v vrsticah 3-37 zagonske datoteke povezovalna skripta premakne v sekcijo.rodata. Zaradi tega teh konstant ne prepišemo, ko znotraj zagonske datoteke postavljamo sklade. 70 Simbol * nadomesti poljubni niz znakov, kar pomeni, da bo povezovalnik v.text sekcijo izvršljive dateke umestili tudi sekcijo s končnico npr..text.ram. 60

61 1 OUTPUT FORMAT( e l f 3 2 l i t t l e a r m, e l f 3 2 bigarm, e l f 3 2 l i t t l e a r m ) 2 OUTPUT ARCH( arm ) 3 ENTRY( s t a r t ) 4 5 SECTIONS 6 { 7. = 0 x ; 8 9. t e x t : 10 { 11 e x i d x s t a r t =. ; 12 PROVIDE ( g n u t e x t s t a r t =. ) ; 13 s t a r t u p. o (. t e x t. t e x t. ) 14 (. t e x t. t e x t. ) 15 } rodata : 18 { 19 (. rodata. rodata. ) ; 20 } e x i d x e n d =. ; 23 PROVIDE ( g n u t e x t e n d =. ) ; data : 26 { 27 PROVIDE ( g n u d a t a s t a r t =. ) ; 28 (. data. data. ) ; 29 PROVIDE ( g n u d a t a end =. ) ; 30 } bss : 33 { 34 PROVIDE ( g n u b s s s t a r t =. ) ; 35 (. bss. bss. ) (COMMON) ; 36 PROVIDE ( g n u b s s e n d =. ) ; 37 } PROVIDE ( end =. ) ; 40 PROVIDE ( e n d =. ) ; 41 i m a g e s i z e = ( ( g n u b s s s t a r t g n u t e x t s t a r t ) + 511) & ; 42 EH FRAME BEGIN = 0 ; } Datoteka 5.6: linker script.ld V vrsticah 39 in 40 na novejši in starejši način definiramo simbola end in end. Potrebujejo in pričakujejo ju novejši in starejši prevajalniki za določanje konca postopka prevajanja. V vrstici 42 definiramo labelo EH_FRAME_BEGIN. Slednjo potrebujejo izpeljanke prevajalnika, vsebovanega v najnovejših različicah razvojne verige GCC. 5.2 Postavitev in uporaba razvojne verige v IDE Ko razumemo zagonsko datoteko in povezovalno skripto, je potrebno napisati še C-izvorne datoteke s funkcijo c_entry, na katero program skoči v zagonski datoteki, natančneje v vrstici 142. Ker je priprava izvršljive datoteke v CLI dokaj zamudna, je potrebno postaviti razvojno okolje, v katerem bo postopek priprave hitrejši Izbira IDE Za hitrejšo pripravo si izberemo prosto dostopni IDE. Ta mora omogočati izdelavo projektov s pomočjo datoteke makefile, podpirati C-sintakso in delovati v OS Linux. Podpora C-sintaksi pomeni, da program prepozna C-ukaze, jih obarva, zaključi zaklepaje, prepozna napake... Izmed prosto dostopnih IDE pogoje najbolje izpolnjuje IDE Eclipse. Ta spada med najpopularnejše in najbolj vzdrževane pakete za Linux. Zaradi tega predstavlja dobro in dolgoročno izbiro. 61

62 5.2.2 Namestitev IDE Eclipse IDE Eclipse je prosto dostopen na uradni spletni strani [48], kjer v glavni menijski vrstici kliknemo Downloads, izberemo različico Eclipse IDE for C/C++ Developers 71, slika 5.10(a), in nato še enega izmed strežnikov, slika 5.10(b). (a) (b) Slika 5.10: (a) Izbira ustrezne različice IDE Eclipse in (b) strežnika za prenos. Z izbiro željenega strežnika potrdimo prenos datoteke eclipse-cpp-indigo-sr2-incubation- linux-gtk.tar, ki se shrani na naslov /home/ziga/downloads na PC. Ker datoteka nosi končnico.tar, jo je potrebno razširiti, vendar pa najprej odpremo CLI in se z ukazom cd /home/ z i g a /Downloads premaknemo v vsebujočo mapo. Nato s spodnjim ukazom pokličemo program Tarball, ki razširi datoteko. tar xf e c l i p s e cpp indigo SR2 incubation linux gtk. tar. gz Znotraj vsebujoče mape nastane nova mapa imenovana eclipse. Slednjo, tako kot mapo cs_lite, stran 39, s spodnjim ukazom premaknemo na naslov /home/ziga/projects. mv e c l i p s e /home/ z i g a / p r o j e c t s Ko se mapa nahaja na željenem naslovu, je potrebno njen naslov dodati pod okoljsko spremenljivko PATH. To storimo z že znanima ukazoma, stran 40. PATH=${PATH}:/ home/ z i g a / p r o j e c t s / e c l i p s e export PATH S spodnjim ukazom odpremo datoteko.bashrc, stran 41, in ukaz PATH=${PATH}:/home/- ziga/projects/eclipse dodamo na konec datoteke, vendar pred ukaz export PATH. 71 Priporočeno je snemavanje 32-bitne različice, vendar pa v nekaterih 64-bitnih Linux distribucijah deluje tudi zmogljivejša 64-bitna različica. 62

63 sudo g e d i t /. bashrc Na konec datoteke.bashrc lahko dodamo krajšo različico, ki združi zgornja dva ukaza v eno vrstico. export PATH=${PATH}:/ home/ z i g a / p r o j e c t s / e c l i p s e / IDE Eclipse je tako nameščen in ga lahko zaženemo z vnosom ukaza eclipse v CLI. Opisano namestitev IDE Eclipse v Linux lahko izvedemo na mnogo različnih načinov Makefile projekt v IDE Eclipse Ob prvem zagonu IDE Eclipse zahteva izbiro mape na disku, kamor bo shranjeval vse projekte. Priporočljivo je izbrati mapo znotraj naslova /home/ziga/, saj imajo na omenjenem naslovu vsi programi pravico branja, pisanja in izvajanja. Slednje ne drži za naslove npr. /bin/, /usr/, /usr/src... Za shranjevanje projektov si izberemo kar naslov /home/ziga/projects/eclipse-projects. Pred tem moramo v programu Thunar na naslovu /home/ziga/projects/ ustvariti mapo z imenom eclipse-projects. Sedaj je potrebno odpreti nov projekt, kar storimo tako, da v glavnem meniju sledimo povezavi File New C Project, ki odpre novo okno, slika 5.11(a). Najprej izberemo ime projekta, v našem primeru prvi_projekt, in preverimo, ali je možnost Use default location obkljukana. Projekt bo shranjen v mapo z imenom prvi_projekt na naslovu /home/ziga/projects/eclipse-projects. V spodnjem levem stolpcu sledimo povezavi Makefile Project Empty Project in v spodnjem desnem stolpcu izberemo Other Toolchain. Ko kliknemo Finish, se novo nastali projekt pojavi v navigacijski vrstici, slika 5.11(b). (a) (b) Slika 5.11: (a) Ustvarjanje novega C projekta v IDE Eclipse in (b) novo nastali projekt v navigacijski vrstici. Projekt razširimo s klikom na puščico, ki stoji levo od imena projekta. Opazimo, da projekt že vsebuje dve datoteki po imenu.project in.cproject. Slednji nosita podatke o projektu, katere potrebuje IDE Eclipse. V primeru velikega števila projektov je lahko razširjanje projektov manj pregledno. Zato projekt raje odpremo tako, da nanj kliknemo z 63

64 desnim miškinim gumbom in iz menija izberemo možnost Go Into. Slednja projekt razširi čez celotno navigacijsko vrstico. Klik na ikono vrne prejšnji pogled. Ker smo pri ustvarjanju novega projekta izbrali možnost Makefile Project, IDE v projektu pričakuje izvorno datoteko z imenom makefile, po kateri se bo ravnal pri izgradnji projekta oz. izvršljive datoteke. Za ustvarjanje nove izvorne datoteke z desnim miškinim gumbom kliknemo na belo površino znotraj navigacijske vrstice in iz menija izberemo možnost New Source File. Slednja odpre novo okno, slika 5.12, v katerem izberemo mapo prvi_projekt, v katero želimo vstaviti izvorno datoteko. Ime izvorne datoteke mora biti makefile s predlogo <None>. Ko kliknemo Finish, opazimo, da v projektu nastane nova izvorna datoteka makefile. Slika 5.12: Ustvarjanje nove izvorne datoteke znotraj IDE Eclipse. Datoteko makefile odpremo z levim miškinim dvoklikom in opazimo, da datoteka nima vsebine. Za vsebino uporabimo datoteko makefile, datoteka 5.4. Po kopiranju vsebine napredek shranimo s kombinacijo tipk Control + S. Ker datoteka makefile, datoteka 5.4, v vrstici 10 potrebuje povezovalno skripto z imenom linker_script.ld, slednjo dodamo v projekt. Po zgoraj opisanem postopku v projektu ustvarimo datoteko linker_script.ld, v katero skopiramo vsebino povezovalne skripte, datoteka 5.6. Datoteka makefile v projektu pričakuje tri podmape imenovane str, src in inc. Slednje ustvarimo tako, da z desnim miškinim gumbom kliknemo na belo površino znotraj navigacijske vrstice in iz menija izberemo možnost New Folder. Ta odpre novo okno, slika 5.13(a), v katerem izberemo projektno mapo prvi_projekt, ki bo vsebovala podmape, poimenujemo podmape v skladu z zahtevami datoteke makefile in kliknemo Finish. 64

65 (a) (b) Slika 5.13: (a) Ustvarjanje nove projektne mape in (b) predloga projektov v IDE Eclipse. Datoteka mekefile pričakuje tudi točno določeno vsebino podmap. Tako mora podmapa src vsebovati C-izvorne datoteke s končnico.c, podmapa inc zaglavne datoteke s končnico.h in podmapa str zagonsko datoteko s končnico.s. Zagonsko datoteko znotraj podmape str ustvarimo tako, da z desnim miškinim gumbom kliknemo na podmapo in iz menija izberemo možnost New Source File. Ta odpre novo okno, slika 5.12, kjer določimo podmapo str. Za ime izvorne datoteke vpišemo startup.s in izberemo predlogo <None>. Ko kliknemo Finish, se v podmapi str pojavi prazna datoteka startup.s, v katero skopiramo vsebino zagonske datoteke, datoteka 5.5. Do sedaj ustvarjen projekt, slika 5.13(b), bo vedno enak in bo od sedaj naprej služil kot predloga. V podmapo src je potrebno dodati še C-izvorne datoteke in v podmapo inc pripadajoče zaglavne datoteke, poglavje 6. Ko so vse izvorne datoteke pripravljene v IDE Eclipse, s klikom na gumb prevedemo izvorne datoteke in znotraj projektne mape ustvarimo izvršljivo datoteko executable_- bin_usb. Slednjo s spodnjim ukazom, stran 48, naložimo v LPC3141. sudo dfu u t i l R t2048 Dexecutable bin usb 65

66 6 Pisanje C-izvornih datotek Zagonska koda, datoteka 5.5, v vrstici 142 skoči na funkcijo c_entry, ki mora biti glavna funkcija vseh C-izvornih datotek. V podpoglavjih so opisani primeri C-izvornih datotek, katere skupaj z zagonsko datoteko in povezovalno skripto prevedemo in povežemo, poglavje 5.1.3, v različne izvršljive datoteke. Vsaka C-izvorna datoteka prikazuje delovanje ene izmed periferij LPC3141, pomembnih za robotiko. Za prikaz delovanja C-programov na prototipni ploščici zgradimo testna vezja in jih po priloženi shemi povežemo s pini na EA3141, priloga B. Ker med postopkom prevajanja C-izvornih datotek s parametrom -O3, stran 44, izberemo največjo optimizacijo, moramo v vseh C-izvornih datotekah kazalčke na registre definirati s pomočjo ukaza volatile. Ta prevajalniku prepreči prenaslavljanje kazalčkov na druge naslove. Prenaslavljanje kazalčkov ni dopustno, ker morajo kazati na fizični naslov registra in ne na virtualni naslov, kjer se register sploh ne nahaja [25, str. 172]. V vseh C-izvornih datotekah so za lažje razumevanje uporabljeni komentarji, omejeni s simboloma /* in */. Vrstični komentarji so drugačni in sledijo simbolu //. 6.1 Digitalni izhodi Prva C-izvorna datoteka, datoteka 6.1, se posveča periferiji IOCONFIG, preko katere lahko nek GPIO postavimo v logično 1 ali 0. Programiranje periferije je preprosto, njeno poznavanje pa nam koristi v vseh nadaljnjih primerih. Najprej v vrsticah 2-5 definiramo kazalčke na ključne registre IOCONFIG, poglavje Preko kazalčkov lahko spreminjamo vrednost katerega koli registra. V vrstici 8 zapišemo prototip funkcije delay, ki prevajalniku z dvakratnim void pred prevajanjem pove, da funkcija delay ne vrne nobene vrednosti in ne sprejema nobenega argumenta. V vrstici 10 imamo vstopno točko c_entry. Izvede se prva. Sledi ukaz, ki v register GPIO_MODE1_SET, tabela 3.6, vpiše vrednost 0x4000 oz. 0b Ta ukaz bit 14 postavi v logično 1 in s tem omogoči manipulacijo s pinom GPIO20, priloga B. Sledi neskončna zanka, v kateri z registroma GPIO_MODE0_SET in GPIO_MODE0_RESET, tabela 3.6, stalno spreminjamo logično stanje na pinu GPIO20 iz 5V na 0V. Vmes s funkcijo delay potrošimo nekaj procesorskih ciklov in posledično časa. Funkcija delay znotraj zanke while zmanjšuje vrednost spremenljivke stej, initializirane v vrstici 23. Ko vrednost stej pade na 0, se zanka while prekine. 66

67 1 // r e g i s t r i p o t r e b n i za n a s t a v i t e v d i g i t a l n i h vhodov preko p e r i f e r i j e IOCONFIG 2 #define GPIO MODE0 SET ( ( ( v o l a t i l e unsigned int ) 0x130031D4 ) ) 3 #define GPIO MODE1 SET ( ( ( v o l a t i l e unsigned int ) 0x130031E4 ) ) 4 #define GPIO MODE0 RESET ( ( ( v o l a t i l e unsigned int ) 0x130031D8 ) ) 5 #define GPIO MODE1 RESET ( ( ( v o l a t i l e unsigned int ) 0x130031E8 ) ) void delay ( void ) ; / p r o t o t i p f u n k c i j e delay / 9 10 void c entry ( void ) { / vstopna tocka programa / GPIO MODE1 SET = 0 x4000 ; while ( 1 ) { / neskoncna while zanka / 15 GPIO MODE0 SET = 0 x4000 ; 16 delay ( ) ; 17 GPIO MODE0 RESET = 0 x4000 ; 18 delay ( ) ; 19 } 20 } void delay ( void ) { / f u n k c i j a delay / 23 v o l a t i l e int s t e j = ; while ( s t e j ) { / zanka w h i l e, k i z a p o s l i MCPU / 26 s t e j = s t e j 1 ; 27 } 28 } Datoteka 6.1: c ioconfig out.c 6.2 Digitalni vhodi V novi C-izvorni datoteki, datoteka 6.3, ne definiramo kazalčkov do registrov. Kazalčke do registrov definiramo v ločeni zaglavni datoteki, datoteka 6.2, v kateri poleg prejšnjih registrov definiramo nov register GPIO_PINS, tabela 3.6, preko katerega lahko istočasno prebiramo digitalno stanje določenih GPIO. Zaglavno datoteko vključimo v vrstici 1 C-izvorne datoteke. V vrstici 7 omogočimo manipulacijo s pinom GPIO20, priloga B. Sledi neskončna zanka in znotraj nje pogojni stavek if else, ki stalno preverja, ali je pogoj v vrstici 10 izpolnjen. Pogoj z ukazom & izvaja operacijo bitni in med številom 0x2000 oz. 0b ter vrednostjo registra GPIO_PINS. Število 0x2000 poskrbi, da na rezultat operacije bitni in vpliva le bit 13 registra GPIO_PINS. Ta določa digitalno stanje pina GPIO19, priloga B. Če je bit 13 v logični 1, je pogoj izpolnjenjen in izvajajo se vrstice V nasprotnem primeru, ko pogoj ni izpolnjen, se izvaja vrstica 17, ki pin GPIO20 postavi v logično stanje 0. 1 // r e g i s t r i p o t r e b n i za n a s t a v i t e v d i g i t a l n i h vhodov preko p e r i f e r i j e IOCONFIG 2 #define GPIO MODE0 SET ( ( ( v o l a t i l e unsigned int ) 0x130031D4 ) ) 3 #define GPIO MODE1 SET ( ( ( v o l a t i l e unsigned int ) 0x130031E4 ) ) 4 #define GPIO MODE0 RESET ( ( ( v o l a t i l e unsigned int ) 0x130031D8 ) ) 5 #define GPIO MODE1 RESET ( ( ( v o l a t i l e unsigned int ) 0x130031E8 ) ) // r e g i s t e r za b r a n j e s t a n j na p i n i h v v l o g i visokoimpedancnih vhodov 9 #define GPIO PINS ( ( ( v o l a t i l e unsigned int ) 0x130031C0 ) ) Datoteka 6.2: c ioconfig in.h 67

68 1 #include c i o c o n f i g i n. h / vkljucimo zaglavno datoteko / 2 3 void delay ( void ) ; / p r o t o t i p f u n k c i j e delay / 4 5 void c entry ( void ) { / vstopna tocka / 6 7 GPIO MODE1 SET = 0 x4000 ; 8 9 while ( 1 ) { / neskoncna w h i l e zanka / 10 i f ( GPIO PINS & 0 x2000 ) { / s t a v e k i f e l s e omogoci pogojno i z v a j a n j e / 11 GPIO MODE0 SET = 0 x4000 ; 12 delay ( ) ; 13 GPIO MODE0 RESET = 0 x4000 ; 14 delay ( ) ; 15 } 16 else { 17 GPIO MODE0 RESET = 0 x4000 ; 18 } 19 } 20 } void delay ( void ) { / f u n k c i j a delay / 23 v o l a t i l e int s t e j = ; while ( s t e j ) { / zanka w h i l e, k i z a p o s l i MCPU / 26 s t e j = s t e j 1 ; 27 } 28 } Datoteka 6.3: c ioconfig in.c 6.3 PWM V zaglavni datoteki, datoteka 6.4, izpustimo vse do sedaj definirane registre in definiramo nove. Registra PWM_TMR, stran 26, in PWM_CNTL, stran 27, sta potrebna za krmiljenje PWM modula in se nahajata znotraj modula, medtem ko se register ESR47, stran 24, nahaja v CGU in služi nastavljanju vhodne frekvence PWM_CLK za PWM modul, tabela 3.3. Slednjo je priporočljivo zmanjšati zaradi varčevanja z energijo. 1 // r e g i s t r a z n o t r a j PWM modula za d o l o c a n j e v r e d n o s t i 12 b i t n e g a PWM s t e v c a i n o s t a l i h n a s t a v i t e v 2 #define PWMTMR ( ( ( v o l a t i l e unsigned int ) 0 x ) ) 3 #define PWM CNTL ( ( ( v o l a t i l e unsigned int ) 0 x ) ) // r e g i s t e r z n o t r a j CGU za n a s t a v l j a n j e vhodne f r e k v e n c e PWM modula 7 #define ESR47 ( ( ( v o l a t i l e unsigned int ) 0x C ) ) Datoteka 6.4: c pwm.h 1 #include c pwm. h / vkljucimo zaglavno datoteko / 2 3 void delay ( void ) ; / p r o t o t i p f u n k c i j e delay / 4 5 void c entry ( void ) { / vstopna tocka / 6 7 ESR47 = 0x3 ; / v CGU za vhodno vrekvenco PWM modula izberemo izhod d e l i l n i k a 10 / 8 PWM CNTL = 0x3 ; / izhodno frekvenco PWM modula delimo z 8 / 9 PWMTMR = 0xFFF ; / nastavimo vrednost 12 bitnega PWM stevca / while ( 1 ) { / neskoncna while zanka / 12 PWMTMR = PWMTMR 15; 13 delay ( ) ; 14 } 15 } void delay ( void ) { / f u n k c i j a delay / 18 v o l a t i l e int s t e j = 25000; while ( s t e j ) { / zanka w h i l e, k i z a p o s l i MCPU / 21 s t e j = s t e j 1 ; 22 } 23 } Datoteka 6.5: c pwm.c Znotraj C-izvorne datoteke, datoteka 6.5, v vrstici 7 za vhodno frekvenco PWM_CLK namesto bazne frekvence AHB0_APB1_BASE izberemo izhod delilnika 10. Delilnik 10 je prednastavljen na deljenje bazne frekvence z 2. Deljeno frekvenco pošlje na pin PWM_DATA, 68

69 priloga B. Da bi na pinu spremembe zaznali tudi s prostim očesom, v vrstici 8 delilnik 10 nastavimo na deljenje bazne frekvence z 8. V vrstici 9 v register PWM_TMR vnesemo vrednost 0xFFF. To je največja vrednost, do katere lahko šteje 12-bitni števec znotraj modula. Če bi vrednost registra PWM_TMR ostala 0xFFF, bi pin PWM_DATA ostal v stanju 1. Vrednost 12-bitnega števca v tem primeru nikoli ne bi mogla biti večja od 0xFFF, slika 3.9. Ker na pinu PWM_DATA želimo spremeniti čas trajanja logične 1, v vrsticah uvedemo neskončno zanko. Ta stalno v korakih po 15 niža vrednost registra PWM_TMR. Posledično je pin PWM_DATA vse manj časa v logičnem stanju 1. Sprememba je vidna tudi na LCD zaslonu, katerega osvetljenost je odvisna od PWM, 6.4 Delilniki V zgornjem primeru, poglavje 6.3, smo za vhodno frekvenco PWM modula nastavili vrednost na izhodu delilnika 10, ki bazno frekvenco deli z 8. Poleg privzetega delitelja 2 delilnik omogoča nastavitev poljubnega delitelja preko registrov v CGU. Slednje definiramo v zaglavni datoteki, datoteka // r e g i s t r i, k i s l u z i j o bazni f r e k v e n c i SYS BASE za i z b i r o ene izmed vhodnih f r e k v e n c 2 #define FS1 0 ( ( ( v o l a t i l e unsigned int ) 0 x ) ) 3 #define FS1 0x7 / b i t 0 2 ( i z b i r a vhodne f r e k v e n c e za s t r a n 1 dvopolnega s t i k a l a / 4 5 #define FS2 0 ( ( ( v o l a t i l e unsigned int ) 0 x ) ) 6 #define FS2 0x7 / b i t 0 2: i z b i r a vhodne f r e k v e n c e za s t r a n 2 dvopolnega s t i k a l a / 7 8 #define SCR0 ( ( ( v o l a t i l e unsigned int ) 0 x ) ) 9 #define ENF1 0x1 / b i t 0 : vklop / i z k l o p s t r a n i 1 dvopolnega s t i k a l a ( p r e d n a s t a v l j e n o 1) / 10 #define ENF2 0x2 / b i t 1 : vklop / i z k l o p s t r a n i 2 dvopolnega s t i k a l a ( p r e d n a s t a v l j e n o 0) / // r e g i s t r i, k i s l u z i j o n a s t a v l j a n j u vhodnih f r e k v e n c za CLOCK OUT 14 #define BCR0 ( ( ( v o l a t i l e unsigned int ) 0 x ) ) 15 #define FD RUN 0x1 / b i t 0 : vklop / i z k l o p vseh d e l i l n i k o v za bazno f r e k v e n c o SYS BASE / #define FDC5 ( ( ( v o l a t i l e unsigned int ) 0x C ) ) 18 #define FD5 RUN 0x1 / b i t 0 : vklop / i z k l o p d e l i l n i k a 5 / 19 #define FD5 RESET 0x2 / b i t 1 : p r e d n a s t a v l j a n j e d e l i l n i k a 5 / 20 #define FD5 MADD 0x7F8 / b i t 3 10: r e z e r v i r a n i za v r ednost MADD / 21 #define FD5 MSUB 0x7F800 / b i t 11 18: r e z e r v i r a n i za v r ednost MSUB / #define ESR15 ( ( ( v o l a t i l e unsigned int ) 0x130043DC ) ) 24 #define EN 0x1 / b i t 0 : izberemo d e l i l n i k in ne bazne frekvence ( prednastavljeno 0) / 25 #define SEL 0xE / b i t 1 3: i z b i r a n j e enega izmed d e l i l n i k o v ( p r e d n a s t a v l j e n o 0) / #define PCR15 ( ( ( v o l a t i l e unsigned int ) 0x130040FC ) ) 28 #define RUN 0x1 / b i t 0 : vklop / i z k l o p f r e k v e n c e za CLOCK OUT / Datoteka 6.6: c fractional divider.h Na vrhu sta definirana registra FS1_0 in FS2_0, stran 22, z zastavicama FS1 in FS2, enakima 0x7 = 0b111. Ti dve zastavici rezervirata prve tri bite v registru. Zastavice nam pomagajo, ko želimo spremeniti le del registra ali ta del v celoti nastaviti na logično 1 ali logično 0. V našem primeru, datoteka 6.7, v vrstici 15 s simbolom negiramo zastavico FS2_0 in s pomočjo &= opravimo operacijo bitni in. Ta prve tri bite v registru FS2_0 postavi v logično stanje 0 in tako v dvopolnem stikalu, slika 3.8, stran 2 nastavi na frekvenco oscilatorja, tabela 3.2. Sledi register SCR0, stran 22, in njegovi zastavici ENF1 = 0x1 = 0b01 in ENF2 = 0x2 = 0b10, ki rezervirata bit 0 in 1. V našem primeru, datoteka 6.7, v vrstici 16 najprej negiramo zastavico ENF1 in preko operacije bitni in v registru SCR0 bit 0 postavimo v logično 0. Tako v dvopolnem stikalu onemogočimo stran 1. V vrstici 17 uporabimo zastavico ENF2, preko = izvedemo operacijo bitni ali ter v registru SCR0 bit 1 postavimo v logično 1. Tako v dvopolnem stikalu omogočimo stran 2. 69

70 Register BCR0, stran 24, preko bita 0 omogoča istočasni vklop ali izklop vseh delilnikov bazne frekvence SYS_BASE. Zastavica FD_RUN = 0x1 = 0b01 rezervira bit 0. V našem primeru, datoteka 6.7, v vrstici 24 preko negiranja in operacije bitni in bit 0 postavimo v logično 0 in ugasnemo vse delilnike, pripadajoče bazni frekvenci SYS_BASE. Register FDC5, stran 24, ima več funkcij, izmed katerih vse neposredno vplivajo na delilnik 5. Za vsako izmed funkcij definiramo zastavico. Zastavica FD5_RUN = 0x1 = 0b1 rezervira bit 0, s katerim vklapljamo ali izklapljamo delilnik 5. Zastavica FD5_RESET = 0x2=0b10 rezervira bit 1, s katerim prednastavimo delilnik 5. Zastavici FD5_MADD = 0x7F8 = 0b in FD5_MSUB = 0x7F800 = 0b rezervirata bite 3-10 in 11-18, kamor vpisujemo vrednosti MADD in MSUB. Slednji delilniku preko (3.2), (3.3) in (3.4) določita poljubni delitelj. V našem primeru na izhodu delilnika želimo frekvenco ν d = 4MHz. Najprej izračunamo vrednosti MADD in MSUB (6.1) in ju v vrsticah vnesemo v program, datoteka 6.7. ν d = n m ν b ν d ν b = n m 4MHz 12MHz = n m 1 3 = n m n = 1 m = 3 } MSUB = n = 1 MADD = m n = 3 1 = 2 (6.1) 1 #include c f r a c t i o n a l d i v i d e r. h 2 3 void c g u f d ( void ) ; / p r o t o t i p f u n k c i j e c g u f d / 4 5 void c entry ( void ) { / vstopna tocka / 6 7 c g u f d ( ) ; / k l i c na f u n k c i j o c g u f d / 8 while ( 1 ) ; / neskoncna w h i l e zanka / 9 } void c g u f d ( void ) { / f u n k c i j a c g u f d / // za bazno frekvenco SYS BASE izberemo 12MHz vhodno frekvenco o s c i l a t o r j a 15 FS2 0 &= ( FS2 ) ; 16 SCR0 &= ENF1 ; 17 SCR0 = ENF2 ; // n a s t a v i t e v v r e d n o s t i MADD i n MSUB, k i v d e l i l n i k u d o l o c i t a d e l j i t e l j a 20 int MADD = 2 ; 21 int MSUB = 1; // i z k l o p vseh d e l i l n i k o v, k i spadajo pod bazno f r e k v e n c o SYS BASE 24 BCR0 &= FD RUN; // p r e d n a s t a v l j a n j e d e l i l n i k a 5 27 FDC5 = FD5 RESET ; 28 FDC5 &= (FD5 RESET) ; // vnos v r e d n o s t i MADD i n MSUB za d e l i l n i k 5 i n s tem n a s t a v i t e v poljubnega d e l j i t e l j a 31 FDC5 &= (FD5 MADD) ; 32 FDC5 &= (FD5 MSUB) ; 33 FDC5 = (FD5 MADD & (MADD << 3) ) ; 34 FDC5 = (FD5 MSUB & (MSUB << 11) ) ; // vklop d e l i l n i k a 5 37 BCR0 = FD RUN; 38 FDC5 = FD5 RUN ; //v CGU za vhodno frekvenco modula CLOCK OUT izberemo izhod d e l i l n i k a 5 41 ESR15 = (SEL & (0 x5 << 1) ) ; 42 ESR15 = EN; 43 PCR15 = RUN; 44 } Datoteka 6.7: c fractional divider.c 70

71 V vrsticah preko bitnega in ter bitnega ali prednastavimo delilnik 5. Nato v vrsticah preko negiranih zastavic FD5_MADD in FD5_MSUB z operacijo bitni in počistimo bite 3-10 in Ko so biti počiščeni v vrsticah vanje s pomočjo ukaza << oz. operacije bitni pomik levo 72 premaknemo vrednosti MSUB in MADD 73. S tem dejansko nastavimo poljubni delitelj delilnika 5. Sedaj je delilnik 5 nastavljen in potrebno ga je vklopiti. Vrstica 37 preko opisanega registra BCR0 in njegove zastavice FD_RUN omogoči vse delilnike, medtem ko vrstica 38 preko opisanega registra FDC5 in njegove zastavice FD_RUN omogoči še delilnik 5. V nadaljevanju uporabimo register ESR15, stran 24, z zastavicama EN = 0x1 = 0b0001 in SEL = 0xE = 0b1110. Prva zastavica rezervira bit 0, ki modulu CLOCK_OUT omogoča izbiro med bazno frekvenco SYS_BASE in nekim delilnikom. V našem primeru vrstica 42 preko bitnega ali bit 0 postavi v logično 1 in izbere delilnik, ki je predhodno že izbran v vrstici 41. Na tem mestu operacija bitni pomik levo vrednost 0x5 premakne v bite 1-3, ki se nato z operacijo bitni ali zapišejo v register ESR15 in s tem izberejo delilnik Vrstica 43 uporabi register PCR15, stran 22, in njegovo zastavico RUN = 0x1 = 0b01. Ta rezervira bit 0, ki omogoča vklop ali izklop frekvence za modul CLOCK_OUT. V našem primeru, v zadnji vrstici preko zastavice RUN in operacije bitni ali, bit 0 postavimo v logično 1. S tem omogočimo frekvenco na modulu CLOCK_OUT. Frekvenco od tega trenutka naprej lahko zaznamo na istoimenskem pinu, priloga A, slika 6.1. Slika 6.1: Pin CLOCK OUT na katerem je dosegljiva frekvenca istoimenskega modula CLOCK OUT. C-izvorna datoteka, datoteka 6.7, v vrstici 7 pokliče funkcijo cgu_fd, ki poskrbi za nastavitev frekvence na izhodnemu pinu CLOCK_OUT. Takoj za funkcijo, v vrstici 8, stoji neskončna while zanka, ki poskrbi, da se program nikoli ne konča. To je pomembno, saj program ne teče na OS. 72 Angleško bitwise left shift. 73 Zastavici FD5 MADD in FD5_MSUB v tem primeru preprečita, da bi prepisali ostale bite. 74 Zastavica SEL v tem primeru prepreči, da bi prepisali ostale bite. 71

72 7 Diskusija Pred pisanjem diplomskega dela sem opravil raziskavo, v kateri me je zanimalo stališče tehniške stroke glede C-programiranja MCU in OS Linux. Ker večina ljudi zna uporabljati le OS Windows, sem se želel preko spletnega vprašalnika [49] prepričati, kakšno vrednost bo imelo moje diplomsko delo. Postavil sem hipotezo, da bi vsaj 30 % uporabnikov OS Windows prestopilo na OS Linux, če jim na slednjem ponudim cenovno ugodno rešitev za programiranje najnovejših MCU. Prehod bi koristil celotnemu šolstvu in tehniki bi tu morali igrati ključno vlogo. Na žalost rezultati spletnega vprašalnika, priloga C, niso zanesljivi, saj vzorec obsega zgolj 33 anketirancev povprečne starosti 31 let. Od tega 3 srednješolske učitelje tehnike, 9 osnovnošolskih učiteljev tehnike in 21 študentov tehnike. Kljub anketiranju samih tehnikov v vprašalniku iz 3. vprašanja lahko zaključimo, da 47, 73 % anketirancev ne razume pojma MCU, in to je skrb vzbujajoče. Slab rezultat je posledica neizkušenosti, saj 54, 55% anketirancev nima izkušenj z MCU. To je razvidno iz 6. vprašanja v vprašalniku. Neizkušenost je posledica tega, da je večina anketirancev še študentov. Spodbudna je statistika vprašanja 15, ki kaže, da bi se 69, 70 % anketirancev kljub neizkušenosti želelo ukvarjati s programiranjem MCU, vendar le, če je to zastonj. Odstotek pade na vrednost 45, 45 %, ko v 14. vprašanju anketirancem omenimo potreben prehod iz OS Windows na OS Linux. Toda odstotek je še vedno spodbuden in uporaba OS Linux se zdi logična glede na visoke cene lastniške programske opreme. Visok odstotek potrdi tudi mojo hipotezo in je razlog, da sem v diplomskem delu obravnaval OS Linux in ne OS Windows, iz katerega se zelo malo naučimo, saj njegova izvorna koda ni dostopna. Ker pred pisanjem diplomskega dela nisem imel izkušenj s programiramjem v C ali ARM zbirniku, sem moral raziskati, ali zahtevnost omenjenih jezikov presega zmožnosti moje ciljne publike. Moja hipoteza je bila, da bo moje diplomsko delo primerno za srednješolce in ne za osnovnošolce. Hipoteza se je izkazala za resnično, saj 93, 95 % anketirancev meni, da programski jezik C ni primeren za osnovno šolo, kar je razvidno iz 17. vprašanja. Omeniti je potrebno, da 60, 6 % podpira uporabo enega izmed C-jezikov v srednji šoli. To je razvidno iz vprašanja 18. Ker 57, 58 % anketirancev meni, da bi morali poleg enega izmed C-jezikov povedati tudi nekaj o zbirnem jeziku, je v diplomi razložena zagonska koda, datoteka 5.5, ki dijakom na tehniških srednjih šolah omogoča podroben vpogled v delovanje mikrokrmilnika LPC3141 in učenje ARM zbirnika, potrebnega na univerzi. Zaradi visokega mnenja o C-jeziku sem proti koncu diplomskega dela opravil prehod na C jezik, poglavje 6. 72

73 8 Zaključek Ker je obravnavani MCU LPC3141 prevelik sistem, da bi ga opisali v enem diplomskem delu, so v delu opisani zgolj osnovni primeri. Ti odpirajo vrata vsem, ki bi želeli diplomsko delo uporabiti kot iztočnico za doktorsko nalogo. V njej bi bilo potrebno napisati delujočo C-izvorno datoteko za ADC. Te periferije mi kljub mnogim poiskusom in navodilom proizvajalca ni uspelo sprogramirati. Tako bi doktorska naloga v kombinaciji z diplomskim delom najprej pokrila vse osnove robotike. Sledilo bi pisanje gonilnikov za krmiljenje koračnih motorjev in nato praktična uporaba teh pri izgradnji svojega robota, rezkarja, stružnice... Ker je nastavitev razvojne verige, razvojnih orodij in IDE Eclipse dolgotrajen postopek, bi ga morali skrajšati. Potrebno bi bilo napisati Linux skripto, ki bi namestitev opravila samodejno. To bi lahko bila tudi slabost, saj bi uporabniki izgubili vpogled v CLI in bi tako razumeli manj. V diplomskem delu je predstavljen način postavitve razvojnega okolja, ki nič ne stane. Vendar pa se ne moremo izogniti nakupu vgrajenega sistema EA3141. Če bi želeli dodatno zmanjšati stroške, bi morali izdelati vgrajeni sistem, ki bi bil prilagojen potrebam srednješolcev. EA3141 vsebuje periferne naprave, ki dvigujejo ceno vgrajenega sistema a jih večina srednješolcev ne bi znala sprogramirati. Za načrtovanje lastnega vgrajenega sistema ne potrebujemo financ, saj v OS Linux že obstaja prosto dostopna EDA. Primer je aplikacija Eagle [50]. 73

74 Literatura [1] Mouser: Keil Development Tools. ( ). [2] LPC Tools: mbed. ( ). [3] Phytec: LPC3250 Rapid Development Kit. ARM-XScale/phyCORE-ARM9-LPC3250.html#pricing. ( ). [4] Windows: Windows lifecycle fact sheet. products/lifecycle. ( ). [5] Mimovrste: Cene operacijskih sistemov Windows 7. category_id=24&q=windows+7&s=najdi. ( ). [6] Mimovrste: Cene paketa Microsoft Office. id=24&q=microsoft+office&s=najdi. ( ). [7] Tatjana Devjak: Teorija vzgoje - Gradivo za študente naravoslovnih ved. http: //ziga-lausegger.netau.net/download/univerza/skripte/teorija_vzgoje/ teorija_vzgoje.pdf. ( ). [8] RTV SLO: Zaradi čezmernega prenašanja vsebin s spleta v zapor. zaradi-cezmernega-prenasanja-vsebin-s-spleta-v-zapor/ ( ). [9] ARM: Cortex-A9 Processor Performance. cortex-a/cortex-a9.php. ( ). [10] Atmel, ATMEGA16 datasheet. doc2466.pdf. ( ). [11] Tekmovanje ROBOsled. htm. ( ). [12] Farnell: Rezultati iskanja za FTDI chip. jsp?n= &ntk=gensearch&ntt=ftdi+chip&ntx=mode+matchallpartial&d= *FTDI*+*chip*. ( ). [13] Farnell: LPC3131FET mcu-32bit-arm9-180m-180tfbga/dp/ ( ). [14] NXP: LPC314x Datasheet (Rev ). lpc314x_ds.pdf. ( ). [15] NXP: LPC314x User Manual (Rev ). UM10362.pdf. ( ). [16] Wikipedia: Pierce oscilator. ( ). [17] Andrew N. Sloss. ARM System Developer s Guide: Designing and Optimizing System Software. Morgan Kaufmann Publishers In, maj [18] Xubuntu: Linux for human beings. ( ). [19] InfraRecorder: domača stran. ( ). [20] Youtube: Xubuntu install. ( ). 74

75 [21] Mentor Graphics: domača stran. ( ). [22] Žiga Lausegger: domača stran. diploma/download/codebench_lite.tar.bz2. ( ). [23] Code Sourcery: Sourcery G++ Lite Getting Started. lite/arm/portal/doc11463/getting-started.pdf. ( ). [24] Balau: Simplest bare metal program for ARM. 14/simplest-bare-metal-program-for-arm/. ( ). [25] W. A. Smith. C programming for embedded microcontrollers. Elektor International Media BV, [26] Dean Elsner: The GNU Assembler. portal/doc11457/as.pdf. ( ). [27] Richard M. Stallman: Using the GNU Compiler Collection. sgpp/lite/arm/portal/doc11460/gcc.pdf. ( ). [28] Steve Chamberlain: The GNU Linker. portal/doc11458/ld.pdf. ( ). [29] Roland H. Pesch: The GNU Binary Utilities. arm/portal/doc11456/binutils.pdf. ( ). [30] LPCLinux: domača stran. ( ). [31] Openmoko: Dfu-util. ( ). [32] Openmoko: Manuals/dfu-util. ( ). [33] Embedded Artists: EA3141 Developper s Kit. kits/lpc3141_kit.php. ( ). [34] Embedded Artists: 3.2 inch QVGA LCD Display. products/displays/lcd_qvga_32.php. ( ). [35] Jr. William E. Shotts: The Linux Command Line. project/linuxcommand/tlcl/09.12/tlcl pdf. ( ). [36] Richard M. Stallman: GNU Make. ( ). [37] ARM: ARM926EJ-S Technical Reference Manual. com.arm.doc.ddi0198e/ddi0198e_arm926ejs_r0p5_trm.pdf. ( ). [38] ARM info center: Coprocessor instructions. topic=/com.arm.doc.ddi0344h/bcgffbfd.html. ( ). [39] ARM info center: Translation table base register 0. jsp?topic=/com.arm.doc.ddi0344h/bgbfdjaa.html. ( ). [40] Miro Samek: Building Bare-Metal ARM Systems with GNU:Part 2. state-machine.com/arm/building_bare-metal_arm_with_gnu.pdf. ( ). [41] IBM:.align pseudo-op. index.jsp?topic=/com.ibm.aix.aixassem/doc/alangref/align.htm. ( ). [42] ARM9EJ-S: Data types. doc.ddi0210c/babdefeh.html. ( ). [43] Hex to ascii and back! ( ). [44] Russell King: ARM Linux September/ html. ( ). [45] ARM info center: Domain Access Control Register. index.jsp?topic=/com.arm.doc.ddi0211i/i html. ( ). [46] ARM info center: Stack pointer initialization. topic=/com.arm.doc.dui0471c/beiijgbc.html. ( ). 75

76 [47] ARM info center: Cache operations. /com.arm.doc.ddi0198e/i html. ( ). [48] Eclipse: domača stran. ( ). [49] Anketni vprašalnik: Programiranje modernih mikrokontrolerjev. com/survey.aspx?id=85acb9cb-123e-46b5-860d-1d0365c59f42. ( ). [50] CadSoft: Eagle. en. ( ). [51] Esurveyspro: domača stran. ( ). 76

77 A Razporeditev pinov na LPC3141 Tlorisni pogled od zgoraj na BGA razporeditev pinov na spodnji strani LPC3141 in njihovo poimenovanje [15, str ]. 77

78 A EBI D 10 EBI A 1 CLE EBI D9 mgpio10 mgpio7 mgpio6 SPI CS OUT0 SPI SCK VPP FFAST IN VSSI ADC10B GNDA ADC10B VDDA33 ADC10B GPA1 B EBI D 8 VDDE IOA EBI A 0 ALE nnand RYBN2 mgpio8 mgpio5 SPI MOSI SPI CS IN PWM DATA FFAST OUT GPIO3 VSSE IOC ADC10B GPA2 ADC10B GPA0 C EBI D 7 EBI D 11 VSSE IOA VSSE IOA mgpio9 VDDI VSSI SPI MISO VPP I2C SDA0 GPIO4 VDDI VDDE IOC ADC10B GPA3 D EBI D 5 EBI D 6 EBI D 13 mnand RYBN3 VDDE IOC VSSE IOC VDDE IOC VSSE IOC VSSE IOC I2C SCL0 VDDA12 VSSI BUF TCK BUF TMS E EBI D 3 EBI D 4 EBI D 14 VSSE IOA VDDE IOA mnand RYBN0 mnand RYBN1 VDDE IOC VSSA12 VDDA12 ARM TDO I2C SDA1 I2C SCL1 I2STXQ_BCK1 F EBI D 2 EBI D 1 EBI D 15 VSSE IOA VDDE IOA SCAN TDO BUF TRST N I2STX DATA1 I2SRX WS1 I2SRX BCK1 G EBI NCAS BLOUT 0 EBIQ_D 0 EBI D 12 VSSI VDDE IOA I2STX WS1 VSSE IOC VDDE IOC SYSCLK O I2SRX DATA1 H EBI DQM 0 NOE EBI NRAS BLOUT 1 VDDI VSSE IOA VDDE IOA GPIO12 GPIO19 CLK 256FS O GPIO11 RSTIN N J NAND NCS 0 EBI NWE NAND NCS 1 CLOCK OUT USB RREF GPIO1 GPIO16 GPIO13 GPIO15 GPIO14 K NAND NCS 2 NAND NCS 3 VSSE IOA USB VSSA REF mlcd DB 12 mlcdq_db 6 mlcdq_db 10 MLCD CSB TDI GPIO0 VDDE IOC GPIO17 GPIO20 GPIO18 L USB VDDA12 PLL USB VBUS USB VSSA TERM VDDE IOB mlcd DB 9 VSSI VDDI mlcd E RD VSSE IOC VDDE IOC VSSI VDDI VSSE IOC GPIO12 M USB ID USB VDDA33 DRV VSSE IOB VSSE IOB VDDE IOB VSSE IOB VDDE IOB VSSE IOB VDDE IOB I2SRX DATA0 mi2stx WS0 mi2stx BCK0 mi2stx DATA0 TCK N USB GNDA USB DM mlcd DB 15 mlcd DB 11 mlcd DB 8 mlcd DB 2 mlcd DB 4 mlcd DB 0 mlcd RW WR I2SRX BCK0 JTAGSEL UART TXD muart CTS N mi2stx CLK0 P USB VDDA33 USB DP mlcd DB 14 MLCD DB 13 mlcd DB 7 mlcd DB 3 mlcd DB 5 mlcd RS mlcd DB 1 TMS I2SRX WS0 UART RXD TRST N muart RST N 78

79 B Razširitveni konektorji na EA3141 ter povezave s prototipno ploščico Pini razširitvenih konektorjev J6, J7 in J8 dosegljivi na vgrajenem sistemu EA3141 ter povezava pinov s testnimi vezji na prototipni ploščici. VBAT SENSE +5V +3V3 N PWR CTRL ADC BEEN AIN0 AIN2 UART TXD SPI CS IN UART BTS SPI CS OUT2 SPI MISO GPIO BOOT0 GPIO BOOT2 I2SRX BCK0 I2SRX DATA0 I2STX BCK0 I2STX DATA0 I2S-SCL0 GPIO6 MCI CMD GPIO7 MCI DAT0 GPIO9 MCI DAT2 PWM DATA PSU STOP RTC CLK GND J GND VBAT VIO 3V2 HIGH LOW CC ADC BEEP AIN1 N RESET IN UART RXD UART CTS SPI SC OUT1 SPI SCK SPI MOSI GPIO BOCT1 GPIO3 I2SRX WS0 I2STX CLK0 I2STX WS0 I2S-SDA0 GPIO5 MCI CLK GPIO4 GPIO8 MCI DAT1 GPIO10 MCI DAT3 PSU PLAY RTC INT OTP VCC EXT NAND RYBN3 NAND RYBN1 NAND NCS2 B N STCS2 BBLS0 B N WF BA15 BA13 BA11 BA9 BA7 BA5 BA3 BA1 N DBUF EN BD0 BD2 BD4 BD6 BD8 BD10 BD12 BD J8 GND GND VDIG 1V8 NAND RYBN2 NAND NCS3 NAND NCS1 B N STCS1 BBLS1 BN OF BA14 BA12 BA10 BA8 BA6 BA4 BA2 BA0 N ABLF EN BD1 BD3 BD5 BD7 BD9 BD11 BD13 BD15 I2SRX BCK1 I2SRX DATA1 I2STX WS1 I2C-SDA1 GPIO11 GPIO13 GPIO15 GPIO17 GPIO20 CLK256FS J I2SRX WS1 I2STX BCK1 I2STX DATA1 I2C-SCL1 GPIO12 GPIO14 GPIO16 GPIO18 GPIO19 SYSCLK

80 J7 J6 X-1 X-2 X1-1 X1-2 +5V X-3 X-4 GND X1-3 X V X-5 X-6 X1-5 X1-6 X-7 X-8 X1-7 X1-8 X-9 X-10 X1-9 X1-10 X-11 X-12 X1-11 X1-12 X-13 X-14 X1-13 X1-14 X-15 X-16 X1-15 X1-16 X-17 X-18 GPIO20 X1-17 X1-18 GPIO19 X-19 X-20 X1-19 X1-20 X-21 X-22 X-23 X-24 X-25 X-26 X-27 X-28 X-29 X-30 Vezja na prototipni ploščici: LED1 LED2 R3 1.8kΩ R1 330Ω R2 330Ω S1 1 2 A B C D X-31 X-32 X-33 X-34 X-35 X-36 X-37 X-38 X-39 X-40 X-41 X-42 +5V PWM_DATA GPIO20 PWM_DATA X-43 X-44 X-45 X-46 X-47 X-48 GND X-49 X-50 Povezave razširitvenih konektorjev J7 in J6 na EA3141 z vezji na prototipni ploščici. Žiga Lausegger GPIO19 A B C D 80

81 C Anketni vprašalnik Rezultati spletnega vprašalnika [49], narejenega s pomočjo spletne strani e-surveyspro [51]. 81

82 82

83 83

84 84

Reševanje problemov in algoritmi

Reševanje problemov in algoritmi Reševanje problemov in algoritmi Vhod Algoritem Izhod Kaj bomo spoznali Zgodovina algoritmov. Primeri algoritmov. Algoritmi in programi. Kaj je algoritem? Algoritem je postopek, kako korak za korakom rešimo

More information

OA07 ANNEX 4: SCOPE OF ACCREDITATION IN CALIBRATION

OA07 ANNEX 4: SCOPE OF ACCREDITATION IN CALIBRATION OA07 ANNEX 4: SCOPE OF ACCREDITATION IN CALIBRATION Table of contents 1 TECHNICAL FIELDS... 2 2 PRESENTING THE SCOPE OF A CALIBRATION LABOORATORY... 2 3 CONSIDERING CHANGES TO SCOPES... 6 4 CHANGES WITH

More information

R V P 2 Predavanje 05

R V P 2 Predavanje 05 R V P 2 Predavanje 05 Kreiranje programskih modulov - Scripts RVP2 Kreiranje programskih modulov 1/44 Programski moduli -Scripts Možnosti: Omogočajo: Izvajanje ukazov Izvajanje logičnih operacij Ob določenih

More information

ENAČBA STANJA VODE IN VODNE PARE

ENAČBA STANJA VODE IN VODNE PARE ENAČBA STANJA VODE IN VODNE PARE SEMINARSKA NALOGA PRI PREDMETU JEDRSKA TEHNIKA IN ENERGETIKA TAMARA STOJANOV MENTOR: IZRED. PROF. DR. IZTOK TISELJ NOVEMBER 2011 Enačba stanja idealni plin: pv = RT p tlak,

More information

LABORATORY MANUAL MICROPROCESSOR AND MICROCONTROLLER

LABORATORY MANUAL MICROPROCESSOR AND MICROCONTROLLER LABORATORY MANUAL S u b j e c t : MICROPROCESSOR AND MICROCONTROLLER TE (E lectr onics) ( S e m V ) 1 I n d e x Serial No T i tl e P a g e N o M i c r o p r o c e s s o r 8 0 8 5 1 8 Bit Addition by Direct

More information

Multipla korelacija in regresija. Multipla regresija, multipla korelacija, statistično zaključevanje o multiplem R

Multipla korelacija in regresija. Multipla regresija, multipla korelacija, statistično zaključevanje o multiplem R Multipla koelacia in egesia Multipla egesia, multipla koelacia, statistično zaklučevane o multiplem Multipla egesia osnovni model in ačunane paametov Z multiplo egesio napoveduemo vednost kiteia (odvisne

More information

TOPLJENEC ASOCIIRA LE V VODNI FAZI

TOPLJENEC ASOCIIRA LE V VODNI FAZI TOPLJENEC ASOCIIRA LE V VODNI FAZI V primeru asociacij molekul topljenca v vodni ali organski fazi eksperimentalno določeni navidezni porazdelitveni koeficient (P n ) v odvisnosti od koncentracije ni konstanten.

More information

OPTIMIRANJE IZDELOVALNIH PROCESOV

OPTIMIRANJE IZDELOVALNIH PROCESOV OPTIMIRANJE IZDELOVALNIH PROCESOV asist. Damir GRGURAŠ, mag. inž. str izr. prof. dr. Davorin KRAMAR damir.grguras@fs.uni-lj.si Namen vaje: Ugotoviti/določiti optimalne parametre pri struženju za dosego

More information

Analogna elektronska vezja. Uvodna vaja

Analogna elektronska vezja. Uvodna vaja Analogna elektronska vezja Uvodna vaja Povzetek Namen uvodne vaje je, da študenti spoznajo orodja, ki jih bojo uporabljali pri laboratorijskih vajah predmeta Analogna elektronska vezja in sicer: podatkovne

More information

Distance reduction with the use of UDF and Mathematica. Redukcija dolžin z uporabo MS Excel ovih lastnih funkcij in programa Mathematica

Distance reduction with the use of UDF and Mathematica. Redukcija dolžin z uporabo MS Excel ovih lastnih funkcij in programa Mathematica RMZ Materials and Geoenvironment, Vol. 54, No. 2, pp. 265-286, 2007 265 Distance reduction with the use of UDF and Mathematica Redukcija dolžin z uporabo MS Excel ovih lastnih funkcij in programa Mathematica

More information

Univerza v Ljubljani Fakulteta za matematiko in fiziko. Oddelek za fiziko. Seminar - 3. letnik, I. stopnja. Kvantni računalniki. Avtor: Tomaž Čegovnik

Univerza v Ljubljani Fakulteta za matematiko in fiziko. Oddelek za fiziko. Seminar - 3. letnik, I. stopnja. Kvantni računalniki. Avtor: Tomaž Čegovnik Univerza v Ljubljani Fakulteta za matematiko in fiziko Oddelek za fiziko Seminar - 3. letnik, I. stopnja Kvantni računalniki Avtor: Tomaž Čegovnik Mentor: prof. dr. Anton Ramšak Ljubljana, marec 01 Povzetek

More information

JEDRSKA URA JAN JURKOVIČ. Fakulteta za matematiko in fiziko Univerza v Ljubljani

JEDRSKA URA JAN JURKOVIČ. Fakulteta za matematiko in fiziko Univerza v Ljubljani JEDRSKA URA JAN JURKOVIČ Fakulteta za matematiko in fiziko Univerza v Ljubljani Natančnost časa postaja vse bolj uporabna in pomembna, zato se rojevajo novi načini merjenja časa. Do danes najbolj natančnih

More information

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. O neeksaknotsti eksaktnega binomskega intervala zaupanja

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. O neeksaknotsti eksaktnega binomskega intervala zaupanja UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE Zaključna naloga (Final project paper) O neeksaknotsti eksaktnega binomskega intervala zaupanja (On the inexactness

More information

ENERGY AND MASS SPECTROSCOPY OF IONS AND NEUTRALS IN COLD PLASMA

ENERGY AND MASS SPECTROSCOPY OF IONS AND NEUTRALS IN COLD PLASMA UDK621.3:(53+54+621 +66), ISSN0352-9045 Informaclje MIDEM 3~(~UU8)4, Ljubljana ENERGY AND MASS SPECTROSCOPY OF IONS AND NEUTRALS IN COLD PLASMA Marijan Macek 1,2* Miha Cekada 2 1 University of Ljubljana,

More information

Izmenični signali moč (17)

Izmenični signali moč (17) Izenicni_signali_MOC(17c).doc 1/7 8.5.007 Izenični signali oč (17) Zania nas potek trenutne oči v linearne dvopolne (dve zunanji sponki) vezju, kjer je napetost na zunanjih sponkah enaka u = U sin( ωt),

More information

EECS 579: SOC Testing

EECS 579: SOC Testing EECS 579: SOC Testing Core-Based Systems-On-A-Chip (SOCs) Cores or IP circuits are predesigned and verified functional units of three main types Soft core: synthesizable RTL Firm core: gate-level netlist

More information

ELECTROMAGNETIC FAULT INJECTION: TOWARDS A FAULT MODEL ON A 32-BIT MICROCONTROLLER

ELECTROMAGNETIC FAULT INJECTION: TOWARDS A FAULT MODEL ON A 32-BIT MICROCONTROLLER ELECTROMAGNETIC FAULT INJECTION: TOWARDS A FAULT MODEL ON A 32-BIT MICROCONTROLLER Nicolas Moro 1,3, Amine Dehbaoui 2, Karine Heydemann 3, Bruno Robisson 1, Emmanuelle Encrenaz 3 1 CEA Commissariat à l

More information

ww.padasalai.net

ww.padasalai.net t w w ADHITHYA TRB- TET COACHING CENTRE KANCHIPURAM SUNDER MATRIC SCHOOL - 9786851468 TEST - 2 COMPUTER SCIENC PG - TRB DATE : 17. 03. 2019 t et t et t t t t UNIT 1 COMPUTER SYSTEM ARCHITECTURE t t t t

More information

OPP Programska oprema

OPP Programska oprema OPP Programska oprema doc.dr.eva Jereb Fakulteta za organizacijske vede Univerza v Mariboru e mail: : eva.jereb@fov.uni mb.si PROGRAMSKA OPREMA SISTEMSKA : (operacijski sistem) vsebuje programe za kontrolo,

More information

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO. Filip Urh DINAMIČNI PARALELIZEM NA GPE.

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO. Filip Urh DINAMIČNI PARALELIZEM NA GPE. UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Filip Urh DINAMIČNI PARALELIZEM NA GPE Diplomsko delo Maribor, september 2015 DINAMIČNI PARALELIZEM NA GPE Diplomsko delo

More information

Vsebina Od problema do načrta programa 1. del

Vsebina Od problema do načrta programa 1. del Vsebina Od problema do načrta programa 1. del Osnovne strategije iskanja rešitev problema Načini opisovanja rešitev problema Osnovni gradniki rešitve problema Primeri Napišite postopek za kuhanje kave

More information

Digitalne strukture. Delovni zvezek za laboratorijske vaje. doc. dr. Gorazd Pucihar. Ime in priimek študenta:

Digitalne strukture. Delovni zvezek za laboratorijske vaje. doc. dr. Gorazd Pucihar. Ime in priimek študenta: Univerza v Ljubljani Fakulteta za elektrotehniko Digitalne strukture Delovni zvezek za laboratorijske vaje doc. dr. Gorazd Pucihar Ime in priimek študenta: Navodila za laboratorijske vaje Splošno Vaje

More information

Digitalna tehnika. Delovni zvezek za laboratorijske vaje. doc. dr. Gorazd Pucihar. Ime in priimek študenta:

Digitalna tehnika. Delovni zvezek za laboratorijske vaje. doc. dr. Gorazd Pucihar. Ime in priimek študenta: Univerza v Ljubljani Fakulteta za elektrotehniko Digitalna tehnika Delovni zvezek za laboratorijske vaje doc. dr. Gorazd Pucihar Ime in priimek študenta: Navodila za laboratorijske vaje Splošno Vaje potekajo

More information

Računalnik iz domin. Škafar, Maja Šafarič, Nina Sangawa Hmeljak Mentor: Vid Kocijan

Računalnik iz domin. Škafar, Maja Šafarič, Nina Sangawa Hmeljak Mentor: Vid Kocijan Računalnik iz domin Primož Škafar, Maja Šafarič, Nina Sangawa Hmeljak Mentor: Vid Kocijan Povzetek Naša naloga je bila ugotoviti kako sestaviti računalnik (Turingov stroj) iz domin in logičnih izrazov.

More information

matematika + biologija = sistemska biologija? Prof. Dr. Kristina Gruden Prof. Dr. Aleš Belič Doc. DDr. Jure Ačimovič

matematika + biologija = sistemska biologija? Prof. Dr. Kristina Gruden Prof. Dr. Aleš Belič Doc. DDr. Jure Ačimovič matematika + biologija = sistemska biologija? Prof. Dr. Kristina Gruden Prof. Dr. Aleš Belič Doc. DDr. Jure Ačimovič Kaj je sistemska biologija? > Razumevanje delovanja organizmov sistemska biologija =

More information

Administrivia. Course Objectives. Overview. Lecture Notes Week markem/cs333/ 2. Staff. 3. Prerequisites. 4. Grading. 1. Theory and application

Administrivia. Course Objectives. Overview. Lecture Notes Week markem/cs333/ 2. Staff. 3. Prerequisites. 4. Grading. 1. Theory and application Administrivia 1. markem/cs333/ 2. Staff 3. Prerequisites 4. Grading Course Objectives 1. Theory and application 2. Benefits 3. Labs TAs Overview 1. What is a computer system? CPU PC ALU System bus Memory

More information

Fakulteta za matematiko in fiziko Univerza v Ljubljani. Seminar. Kvantni računalniki. Avtor: Matjaž Gregorič. Mentor: prof. N.S.

Fakulteta za matematiko in fiziko Univerza v Ljubljani. Seminar. Kvantni računalniki. Avtor: Matjaž Gregorič. Mentor: prof. N.S. Fakulteta za matematiko in fiziko Univerza v Ljubljani Seminar Kvantni računalniki Avtor: Matjaž Gregorič Mentor: prof. N.S. Mankoč Borštnik Ljubljana, november 7 Povzetek V seminarju so predstavljene

More information

Optimizacija delovanja in povečanje obiska na spletni strani

Optimizacija delovanja in povečanje obiska na spletni strani UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Jure Adlešič Optimizacija delovanja in povečanje obiska na spletni strani DIPLOMSKO DELO NA VISOKOŠOLSKEM STROKOVNEM ŠTUDIJU Mentor: doc.

More information

Iskanje najcenejše poti v grafih preko polkolobarjev

Iskanje najcenejše poti v grafih preko polkolobarjev Univerza v Ljubljani Fakulteta za računalništvo in informatiko Veronika Horvat Iskanje najcenejše poti v grafih preko polkolobarjev DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

Sistem za sledenje in analizo uporabe računalniških aplikacij

Sistem za sledenje in analizo uporabe računalniških aplikacij Univerza v Ljubljani Fakulteta za računalništvo in informatiko Dejan Mesar Sistem za sledenje in analizo uporabe računalniških aplikacij DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: izr. prof. dr.

More information

Metode rangiranja spletnih strani

Metode rangiranja spletnih strani UNIVERZA V LJUBLJANI FAKULTETA ZA DRUŽBENE VEDE David Primc Metode rangiranja spletnih strani Diplomsko delo Ljubljana, 2015 UNIVERZA V LJUBLJANI FAKULTETA ZA DRUŽBENE VEDE David Primc Mentor: doc. dr.

More information

Verodostojnost in kvaliteta spletno dostopnih informacij

Verodostojnost in kvaliteta spletno dostopnih informacij Univerza v Ljubljani Filozofska fakulteta Oddelek za bibliotekarstvo, informacijsko znanost in knjigarstvo Verodostojnost in kvaliteta spletno dostopnih informacij Mentor: dr. Jure Dimec Lea Očko Katja

More information

Uporabniški portal za upravljanje virov v oblaku

Uporabniški portal za upravljanje virov v oblaku Univerza v Ljubljani Fakulteta za računalništvo in informatiko Matic Lesjak Uporabniški portal za upravljanje virov v oblaku DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

21.1 Scilab Brownov model 468 PRILOGA. By: Dejan Dragan [80] // brown.m =========================== function brown(d,alfa) fakt = 5;

21.1 Scilab Brownov model 468 PRILOGA. By: Dejan Dragan [80] // brown.m =========================== function brown(d,alfa) fakt = 5; Poglavje 21 PRILOGA 468 PRILOGA 21.1 Scilab By: Dejan Dragan [80] 21.1.1 Brownov model // brown.m =========================== function brown(d,alfa) fakt = 5; N = length(d); t = [1:1:N]; // izhodi prediktor-filtra

More information

EECS150 - Digital Design Lecture 23 - FFs revisited, FIFOs, ECCs, LSFRs. Cross-coupled NOR gates

EECS150 - Digital Design Lecture 23 - FFs revisited, FIFOs, ECCs, LSFRs. Cross-coupled NOR gates EECS150 - Digital Design Lecture 23 - FFs revisited, FIFOs, ECCs, LSFRs April 16, 2009 John Wawrzynek Spring 2009 EECS150 - Lec24-blocks Page 1 Cross-coupled NOR gates remember, If both R=0 & S=0, then

More information

Attempt to prepare seasonal weather outlook for Slovenia

Attempt to prepare seasonal weather outlook for Slovenia Attempt to prepare seasonal weather outlook for Slovenia Main available sources (ECMWF, EUROSIP, IRI, CPC.NCEP.NOAA,..) Two parameters (T and RR anomally) Textual information ( Met Office like ) Issued

More information

MICROWAVE PLASMAS AT ATMOSPHERIC PRESSURE: NEW THEORETICAL DEVELOPMENTS AND APPLICATIONS IN SURFACE SCIENCE

MICROWAVE PLASMAS AT ATMOSPHERIC PRESSURE: NEW THEORETICAL DEVELOPMENTS AND APPLICATIONS IN SURFACE SCIENCE UDK621.3:(53+54+621 +66), ISSN0352-9045 Informacije MIDEM 38(2008)4, Ljubljana MICROWAVE PLASMAS AT ATMOSPHERIC PRESSURE: NEW THEORETICAL DEVELOPMENTS AND APPLICATIONS IN SURFACE SCIENCE T. 8elmonte*,

More information

Jamova cesta Ljubljana, Slovenija Jamova cesta 2 SI 1000 Ljubljana, Slovenia

Jamova cesta Ljubljana, Slovenija   Jamova cesta 2 SI 1000 Ljubljana, Slovenia Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo University of Ljubljana Faculty of Civil and Geodetic Engineering Jamova cesta 2 1000 Ljubljana, Slovenija http://www3.fgg.uni-lj.si/ Jamova

More information

Izvedba algoritmov računske geometrije. na arhitekturi CUDA

Izvedba algoritmov računske geometrije. na arhitekturi CUDA UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Anže Škerjanc Izvedba algoritmov računske geometrije na arhitekturi CUDA DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE

More information

ECEN 651: Microprogrammed Control of Digital Systems Department of Electrical and Computer Engineering Texas A&M University

ECEN 651: Microprogrammed Control of Digital Systems Department of Electrical and Computer Engineering Texas A&M University ECEN 651: Microprogrammed Control of Digital Systems Department of Electrical and Computer Engineering Texas A&M University Prof. Mi Lu TA: Ehsan Rohani Laboratory Exercise #4 MIPS Assembly and Simulation

More information

Matej Gutman. Izvedba nevronske mreže s programirljivimi vezji FPGA. diplomsko delo na univerzitetnem študiju. mentor: doc. dr.

Matej Gutman. Izvedba nevronske mreže s programirljivimi vezji FPGA. diplomsko delo na univerzitetnem študiju. mentor: doc. dr. UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Matej Gutman Izvedba nevronske mreže s programirljivimi vezji FPGA diplomsko delo na univerzitetnem študiju mentor: doc. dr. Uroš Lotrič Ljubljana,

More information

Simulacija dinamičnih sistemov s pomočjo osnovnih funkcij orodij MATLAB in Simulink

Simulacija dinamičnih sistemov s pomočjo osnovnih funkcij orodij MATLAB in Simulink Laboratorijske vaje Računalniška simulacija 2012/13 1. laboratorijska vaja Simulacija dinamičnih sistemov s pomočjo osnovnih funkcij orodij MATLAB in Simulink Pri tej laboratorijski vaji boste spoznali

More information

Naloge iz LA T EXa : 3. del

Naloge iz LA T EXa : 3. del Naloge iz LA T EXa : 3. del 1. V besedilo vklju ite naslednjo tabelo skupaj z napisom Kontrolna naloga Dijak 1 2 Povpre je Janko 67 72 70.5 Metka 72 67 70.5 Povpre je 70.5 70.5 Tabela 1: Rezultati kontrolnih

More information

Zgoščevanje podatkov

Zgoščevanje podatkov Zgoščevanje podatkov Pojem zgoščevanje podatkov vključuje tehnike kodiranja, ki omogočajo skrajšan zapis neke datoteke. Poznan program za zgoščevanje datotek je WinZip. Podatke je smiselno zgostiti v primeru

More information

A L A BA M A L A W R E V IE W

A L A BA M A L A W R E V IE W A L A BA M A L A W R E V IE W Volume 52 Fall 2000 Number 1 B E F O R E D I S A B I L I T Y C I V I L R I G HT S : C I V I L W A R P E N S I O N S A N D TH E P O L I T I C S O F D I S A B I L I T Y I N

More information

Paralelni in distribuirani algoritmi v numerični analizi

Paralelni in distribuirani algoritmi v numerični analizi Univerza v Ljubljani Fakulteta za računalništvo in informatiko Rok Kralj Paralelni in distribuirani algoritmi v numerični analizi DIPLOMSKO DELO UNIVERZITETNI INTERDISCIPLINARNI ŠTUDIJSKI PROGRAM PRVE

More information

,- # (%& ( = 0,% % <,( #, $ <<,( > 0,% #% ( - + % ,'3-% & '% #% <,( #, $ <<,(,9 (% +('$ %(- $'$ & " ( (- +' $%(& 2,#. = '%% ($ (- +' $ '%("

,- # (%& ( = 0,% % <,( #, $ <<,( > 0,% #% ( - + % ,'3-% & '% #% <,( #, $ <<,(,9 (% +('$ %(- $'$ &  ( (- +' $%(& 2,#. = '%% ($ (- +' $ '%( FEATURES!" #$$ % %&' % '( $ %( )$*++$ '(% $ *++$ %(%,- *(% (./ *( #'% # *( 0% ( *( % #$$ *( '( + 2' %( $ '( 2! '3 ((&!( *( 4 '3.%" / '3 3.% 7" 28" 9' 9,*: $ 9,*: $% (+'( / *(.( # ( 2(- %3 # $((% # ;' '3$-,(

More information

Excel. Matjaž Željko

Excel. Matjaž Željko Excel Matjaž Željko Elektronska preglednica Excel Excel je zmogljiv kalkulator. Omogoča izdelavo grafikonov statistično analizo podatkov lepo oblikovanje poročila za natis Podatke predstavljamo tabelarično,

More information

Miha Strel. Integracija ogrodja Medius Vaadin Common na poslovnih portalih

Miha Strel. Integracija ogrodja Medius Vaadin Common na poslovnih portalih UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Miha Strel Integracija ogrodja Medius Vaadin Common na poslovnih portalih DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Mentor: prof. dr. Marjan

More information

Preverjanje optimiziranosti spletnih strani

Preverjanje optimiziranosti spletnih strani UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Boštjan Hozjan Preverjanje optimiziranosti spletnih strani DIPLOMSKO DELO NA UNIVERZITETNEM ŠTUDIJU Ljubljana, 2016 UNIVERZA V LJUBLJANI

More information

Calculation of stress-strain dependence from tensile tests at high temperatures using final shapes of specimen s contours

Calculation of stress-strain dependence from tensile tests at high temperatures using final shapes of specimen s contours RMZ Materials and Geoenvironment, Vol. 59, No. 4, pp. 331 346, 2012 331 Calculation of stress-strain dependence from tensile tests at high temperatures using final shapes of specimen s contours Določitev

More information

USING SIMULATED SPECTRA TO TEST THE EFFICIENCY OF SPECTRAL PROCESSING SOFTWARE IN REDUCING THE NOISE IN AUGER ELECTRON SPECTRA

USING SIMULATED SPECTRA TO TEST THE EFFICIENCY OF SPECTRAL PROCESSING SOFTWARE IN REDUCING THE NOISE IN AUGER ELECTRON SPECTRA UDK 543.428.2:544.171.7 ISSN 1580-2949 Original scientific article/izvirni znanstveni ~lanek MTAEC9, 49(3)435(2015) B. PONIKU et al.: USING SIMULATED SPECTRA TO TEST THE EFFICIENCY... USING SIMULATED SPECTRA

More information

YEAR III SEMESTER - V

YEAR III SEMESTER - V YEAR III SEMESTER - V Remarks Total Marks Semester V Teaching Schedule Hours/Week College of Biomedical Engineering & Applied Sciences Microsyllabus NUMERICAL METHODS BEG 389 CO Final Examination Schedule

More information

Izdelava spletne strani z uporabo programske opreme kot storitve

Izdelava spletne strani z uporabo programske opreme kot storitve Univerza v Ljubljani Fakulteta za elektrotehniko Luka Šimšić Izdelava spletne strani z uporabo programske opreme kot storitve Diplomsko delo visokošolskega strokovnega študija prve stopnje Mentor: doc.

More information

Zanesljivostna analiza Microsoft Kinect

Zanesljivostna analiza Microsoft Kinect Univerza v Ljubljani Fakulteta za računalništvo in informatiko Računalniška zanesljivost in diagnostika Seminarska naloga Zanesljivostna analiza Microsoft Kinect David Lapajne, Leon Golob, Matej Pangerc,

More information

Cveto Trampuž PRIMERJAVA ANALIZE VEČRAZSEŽNIH TABEL Z RAZLIČNIMI MODELI REGRESIJSKE ANALIZE DIHOTOMNIH SPREMENLJIVK

Cveto Trampuž PRIMERJAVA ANALIZE VEČRAZSEŽNIH TABEL Z RAZLIČNIMI MODELI REGRESIJSKE ANALIZE DIHOTOMNIH SPREMENLJIVK Cveto Trampuž PRIMERJAVA ANALIZE VEČRAZSEŽNIH TABEL Z RAZLIČNIMI MODELI REGRESIJSKE ANALIZE DIHOTOMNIH SPREMENLJIVK POVZETEK. Namen tega dela je prikazati osnove razlik, ki lahko nastanejo pri interpretaciji

More information

NIKJER-NIČELNI PRETOKI

NIKJER-NIČELNI PRETOKI UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA ALJA ŠUBIC NIKJER-NIČELNI PRETOKI DIPLOMSKO DELO LJUBLJANA, 2016 UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA Dvopredmetni učitelj: matematika - računalništvo ALJA

More information

Differential Pressure Sensor

Differential Pressure Sensor Differential Pressure Sensor MDP200 Series Features Pressure range up to ±500Pa with high accuracy of ±3.0% m.v. Pressure based on thermal micro-flow measurement Outstanding hysteresis and repeatability

More information

USING THE DIRECTION OF THE SHOULDER S ROTATION ANGLE AS AN ABSCISSA AXIS IN COMPARATIVE SHOT PUT ANALYSIS. Matej Supej* Milan Čoh

USING THE DIRECTION OF THE SHOULDER S ROTATION ANGLE AS AN ABSCISSA AXIS IN COMPARATIVE SHOT PUT ANALYSIS. Matej Supej* Milan Čoh Kinesiologia Slovenica, 14, 3, 5 14 (28) Faculty of Sport, University of Ljubljana, ISSN 1318-2269 5 Matej Supej* Milan Čoh USING THE DIRECTION OF THE SHOULDER S ROTATION ANGLE AS AN ABSCISSA AXIS IN COMPARATIVE

More information

Gregor Papa DOKTORSKA DISERTACIJA. mentor: prof. dr. Franc Bratkovič

Gregor Papa DOKTORSKA DISERTACIJA. mentor: prof. dr. Franc Bratkovič Univerza v Ljubljani Fakulteta za elektrotehniko Gregor Papa Sočasno razvrščanje operacij in dodeljevanje enot z evolucijsko tehniko v postopku načrtovanja integriranih vezij DOKTORSKA DISERTACIJA mentor:

More information

Državni izpitni center. Izpitna pola 1. Četrtek, 4. junij 2015 / 90 minut

Državni izpitni center. Izpitna pola 1. Četrtek, 4. junij 2015 / 90 minut Š i f r a k a n d i d a t a : Državni izpitni center *M15177111* SPOMLADANSKI IZPITNI ROK Izpitna pola 1 Četrtek, 4. junij 015 / 90 minut Dovoljeno gradivo in pripomočki: Kandidat prinese nalivno pero

More information

CprE 281: Digital Logic

CprE 281: Digital Logic CprE 28: Digital Logic Instructor: Alexander Stoytchev http://www.ece.iastate.edu/~alexs/classes/ Simple Processor CprE 28: Digital Logic Iowa State University, Ames, IA Copyright Alexander Stoytchev Digital

More information

Sekvenčna preklopna vezja

Sekvenčna preklopna vezja - Sekvenčna preklopna vezja (delovna verzija 5..27) Prosojnica št. 7- Primer vezja s povratno povezavo Osnovni pomnilni element je izveden s kaskadno vezavo invertorjev Osnovni element: invertor (INV)

More information

Project Two RISC Processor Implementation ECE 485

Project Two RISC Processor Implementation ECE 485 Project Two RISC Processor Implementation ECE 485 Chenqi Bao Peter Chinetti November 6, 2013 Instructor: Professor Borkar 1 Statement of Problem This project requires the design and test of a RISC processor

More information

SIMETRIČNE KOMPONENTE

SIMETRIČNE KOMPONENTE Univerza v Ljubljani Fakulteta za elektrotehniko SIMETRIČNE KOMPONENTE Seminarska naloga pri predmetu Razdelilna in industrijska omrežja Poročilo izdelala: ELIZABETA STOJCHEVA Mentor: prof. dr. Grega Bizjak,

More information

Assignment 6: A/D-Converters and PID Controllers

Assignment 6: A/D-Converters and PID Controllers Assignment 6: A/D-Converters and PID Controllers 1DT056: Programming Embedded Systems Uppsala University March 4th, 2012 You can achieve a maximum number of 20 points in this assignment. 12 out of the

More information

Sodobna orodja in postopki za načrtovanje algortimov vodenja servopogonov

Sodobna orodja in postopki za načrtovanje algortimov vodenja servopogonov AIG 03, MARIBOR Sodobna orodja in postopki za načrtovanje algortimov vodenja servopogonov Miran Rodič, Karel Jezernik Univerza v Mariboru, Fakulteta za elektrotehniko, računalništvo in informatiko Smetanova

More information

Aleš Fleischmann Gradniki vmesniškega podsklopa sistema za procesno dokumentacijo

Aleš Fleischmann Gradniki vmesniškega podsklopa sistema za procesno dokumentacijo UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Aleš Fleischmann Gradniki vmesniškega podsklopa sistema za procesno dokumentacijo Visokošolski strokovni študij Diplomsko delo Mentor: doc.

More information

Kristijan Boček. Aritmetična knjižnica vgrajenega sistema za vodenje zaščitnega releja

Kristijan Boček. Aritmetična knjižnica vgrajenega sistema za vodenje zaščitnega releja UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Kristijan Boček Aritmetična knjižnica vgrajenega sistema za vodenje zaščitnega releja DIPLOMSKO DELO NA VISOKOŠOLSKEM STROKOVNEM ŠTUDIJU Mentor:

More information

GR16. Technical Manual. 10 M SPS, 16-bit Analog Signal Digitizer up to 8MB FIFO

GR16. Technical Manual. 10 M SPS, 16-bit Analog Signal Digitizer up to 8MB FIFO GR M SPS, -bit Analog Signal Digitizer up to MB FIFO Technical Manual 90 th Street, Davis, CA 9, USA Tel: 0--00 Fax: 0--0 Email: sales@tern.com web site: www.tern.com COPYRIGHT GR, EL, Grabber, and A-Engine

More information

Operating systems and concurrency B03

Operating systems and concurrency B03 Operating systems and concurrency B03 David Kendall Northumbria University David Kendall (Northumbria University) Operating systems and concurrency B03 1 / 13 Introduction A key function of OS is interrupt

More information

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Verjetnostni algoritmi za testiranje praštevilskosti

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE. Verjetnostni algoritmi za testiranje praštevilskosti UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE Zaključna naloga Verjetnostni algoritmi za testiranje praštevilskosti (Algorithms for testing primality) Ime in

More information

NCU EE -- DSP VLSI Design. Tsung-Han Tsai 1

NCU EE -- DSP VLSI Design. Tsung-Han Tsai 1 NCU EE -- DSP VLSI Design. Tsung-Han Tsai 1 Multi-processor vs. Multi-computer architecture µp vs. DSP RISC vs. DSP RISC Reduced-instruction-set Register-to-register operation Higher throughput by using

More information

Implementacija modula r.cuda.los v odprtokodnem paketu GRASS GIS z vzporednim računanjem na grafičnih karticah NVIDIA CUDA

Implementacija modula r.cuda.los v odprtokodnem paketu GRASS GIS z vzporednim računanjem na grafičnih karticah NVIDIA CUDA ELEKTROTEHNIŠKI VESTNIK 79(1-2): 19 24, 2012 EXISTING SEPARATE ENGLISH EDITION Implementacija modula r.cuda.los v odprtokodnem paketu GRASS GIS z vzporednim računanjem na grafičnih karticah NVIDIA CUDA

More information

NALOGE ZA PRVO SKUPINO

NALOGE ZA PRVO SKUPINO 1999.1.1 3] 1 23. državno tekmovanje v znanju računalništva (1999) 1999.1.1 NALOGE ZA PRVO SKUPINO Podjetje Import Eskort te je najelo za svetovalca za rešitev R: 11 njihovega problema letnice 2000. V

More information

Introduction of Branching Degrees of Octane Isomers

Introduction of Branching Degrees of Octane Isomers DOI: 10.17344/acsi.2016.2361 Acta Chim. Slov. 2016, 63, 411 415 411 Short communication Introduction of Branching Degrees of Octane Isomers Anton Perdih Faculty of Chemistry and Chemical Technology, University

More information

Grabber. Technical Manual

Grabber. Technical Manual Grabber 0 MHZ Analog Signal Digitizer Technical Manual 0 th Street, Davis, CA, USA Tel: 0--00 Fax: 0--0 Email: sales@tern.com http://www.tern.com COPYRIGHT Grabber, and A-Engine are trademarks of TERN,

More information

1 Luna kot uniformni disk

1 Luna kot uniformni disk 1 Luna kot uniformni disk Temperatura lune se spreminja po površini diska v širokem razponu, ampak lahko luno prikažemo kot uniformni disk z povprečno temperaturo osvetlitve (brightness temperature) izraženo

More information

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE

UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE UNIVERZA NA PRIMORSKEM FAKULTETA ZA MATEMATIKO, NARAVOSLOVJE IN INFORMACIJSKE TEHNOLOGIJE Zaključna naloga Primerjava modernih pristopov za identifikacijo pomembno izraženih genov za dve skupini (Comparison

More information

Platforma Trafika v HTML5

Platforma Trafika v HTML5 Univerza v Ljubljani Fakulteta za računalništvo in informatiko Aleksander Gregorka Platforma Trafika v HTML5 DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA

More information

Linearne enačbe. Matrična algebra. Linearne enačbe. Linearne enačbe. Linearne enačbe. Linearne enačbe

Linearne enačbe. Matrična algebra. Linearne enačbe. Linearne enačbe. Linearne enačbe. Linearne enačbe Sistem linearnih enačb Matrična algebra Oseba X X X3 B A.A. 3 B.B. 7 C.C. Doc. dr. Anja Podlesek Oddelek za psihologijo, Filozofska fakulteta, Univerza v Ljubljani Študijski program prve stopnje Psihologija

More information

How to create designs with Dynamic/Adaptive Voltage Scaling. Roy H. Liu National Semiconductor Corporation

How to create designs with Dynamic/Adaptive Voltage Scaling. Roy H. Liu National Semiconductor Corporation How to create designs with Dynamic/Adaptive Voltage Scaling Roy H. Liu National Semiconductor orporation What you will learn from this session Design challenges with variable voltage level Design partitioning

More information

Implementacija mobilne naprave za GPS sledenje

Implementacija mobilne naprave za GPS sledenje Univerza v Ljubljani Fakulteta za računalništvo in informatiko Anže Medved Implementacija mobilne naprave za GPS sledenje DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO IN INFORMATIKA

More information

Drevesno preiskovanje Monte Carlo v porazdeljenem okolju

Drevesno preiskovanje Monte Carlo v porazdeljenem okolju Univerza v Ljubljani Fakulteta za računalništvo in informatiko Jure Grabnar Drevesno preiskovanje Monte Carlo v porazdeljenem okolju DIPLOMSKO DELO UNIVERZITETNI ŠTUDIJSKI PROGRAM PRVE STOPNJE RAČUNALNIŠTVO

More information

AKSIOMATSKA KONSTRUKCIJA NARAVNIH

AKSIOMATSKA KONSTRUKCIJA NARAVNIH UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA Poučevanje: Predmetno poučevanje ŠPELA ZOBAVNIK AKSIOMATSKA KONSTRUKCIJA NARAVNIH ŠTEVIL MAGISTRSKO DELO LJUBLJANA, 2016 UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

More information

Univerza na Primorskem. Fakulteta za matematiko, naravoslovje in informacijske tehnologije. Zaznavanje gibov. Zaključna naloga

Univerza na Primorskem. Fakulteta za matematiko, naravoslovje in informacijske tehnologije. Zaznavanje gibov. Zaključna naloga Univerza na Primorskem Fakulteta za matematiko, naravoslovje in informacijske tehnologije Boštjan Markežič Zaznavanje gibov Zaključna naloga Koper, september 2011 Mentor: doc. dr. Peter Rogelj Kazalo Slovarček

More information

Baroklina nestabilnost

Baroklina nestabilnost Baroklina nestabilnost Navodila za projektno nalogo iz dinamične meteorologije 2012/2013 Januar 2013 Nedjeljka Zagar in Rahela Zabkar Naloga je zasnovana na dvoslojnem modelu baroklinega razvoja, napisana

More information

Computing the steady-state response of nonlinear circuits by means of the ǫ-algorithm

Computing the steady-state response of nonlinear circuits by means of the ǫ-algorithm Elektrotehniški vestnik XX(Y): 6, YEAR Electrotechnical Review, Ljubljana, Slovenija Computing the steady-state response of nonlinear circuits by means of the ǫ-algorithm Borut Wagner, Árpád Bűrmen, Janez

More information

UČNI NAČRT PREDMETA / COURSE SYLLABUS Numerical linear algebra. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work

UČNI NAČRT PREDMETA / COURSE SYLLABUS Numerical linear algebra. Študijska smer Study field. Samost. delo Individ. work Klinične vaje work Predmet: Course title: UČNI NAČRT PREDMETA / COURSE SYLLABUS Numerična linearna algebra Numerical linear algebra Študijski program in stopnja Study programme and level Univerzitetni študijski program Matematika

More information

xlogic SuperRelay is a compact and expandable CPU replacing mini PLCs, multiple timers, relays and counters.

xlogic SuperRelay is a compact and expandable CPU replacing mini PLCs, multiple timers, relays and counters. SuperRelay S U P E R R E L A Y, T H E P E R F E C T A L T E R N A T I V E T O L O W C O S T P L C s A N D B A S I C R E L A Y S I N T H I S B R O C H U R E : ELC 18 Standard Models ELC 18 Economy Models

More information

Green Computing. A study to measure the Accuracy of ATmega 32 MCU in solving the complicated astronomical equation Ahmed J. Abid

Green Computing. A study to measure the Accuracy of ATmega 32 MCU in solving the complicated astronomical equation Ahmed J. Abid Green Computing A study to measure the Accuracy of ATmega 32 MCU in solving the complicated astronomical equation Ahmed J. Abid Electronic Engineering Department Foundation of Technical Education, Baghdad,

More information

23. državno tekmovanje v znanju računalništva (1999) NALOGE ZA PRVO SKUPINO

23. državno tekmovanje v znanju računalništva (1999) NALOGE ZA PRVO SKUPINO 1999.1.1 4] Leto 1999, naloge za prvo skupino 1 23. državno tekmovanje v znanju računalništva (1999) 1999.1.1 NALOGE ZA PRVO SKUPINO Podjetje Import Eskort te je najelo za svetovalca za rešitev Rešitev:

More information

Lab 3 Revisited. Zener diodes IAP 2008 Lecture 4 1

Lab 3 Revisited. Zener diodes IAP 2008 Lecture 4 1 Lab 3 Revisited Zener diodes R C 6.091 IAP 2008 Lecture 4 1 Lab 3 Revisited +15 Voltage regulators 555 timers 270 1N758 0.1uf 5K pot V+ V- 2N2222 0.1uf V o. V CC V Vin s = 5 V Vc V c Vs 1 e t = RC Threshold

More information

LOGIC CIRCUITS. Basic Experiment and Design of Electronics. Ho Kyung Kim, Ph.D.

LOGIC CIRCUITS. Basic Experiment and Design of Electronics. Ho Kyung Kim, Ph.D. Basic Experiment and Design of Electronics LOGIC CIRCUITS Ho Kyung Kim, Ph.D. hokyung@pusan.ac.kr School of Mechanical Engineering Pusan National University Digital IC packages TTL (transistor-transistor

More information

GEOMETRIJSKE FAZE V KVANTNI MEHANIKI

GEOMETRIJSKE FAZE V KVANTNI MEHANIKI GEOMETRIJSKE FAZE V KVANTNI MEHANIKI LARA ULČAKAR Fakulteta za matematiko in fiziko Univerza v Ljubljani V članku so predstavljene geometrijske faze, ki nastopijo pri obravnavi kvantnih sistemov. Na začetku

More information

AZ DISPLAYS, INC. COMPLETE LCD SOLUTIONS SPECIFICATIONS FOR LIQUID CRYSTAL DISPLAY

AZ DISPLAYS, INC. COMPLETE LCD SOLUTIONS SPECIFICATIONS FOR LIQUID CRYSTAL DISPLAY COMPLETE LCD SOLUTIONS SPECIFICATIONS FOR LIQUID CRYSTAL DISPLAY PART NUMBER: DATE: APRIL 01, 2008 General Specification Driving IC NT7534 Interace With Paraller MPU 8080 Series Display Specification Display

More information

MS4525HRD (High Resolution Digital)

MS4525HRD (High Resolution Digital) MS4525HRD (High Resolution Digital) Integrated Digital Pressure Sensor (24-bit Σ ADC) Fast Conversion Down to 1 ms Low Power, 1 µa (standby < 0.15 µa) Supply Voltage: 1.8 to 3.6V Pressure Range: 1 to 150

More information

Jamova cesta Ljubljana, Slovenija Jamova cesta 2 SI 1000 Ljubljana, Slovenia

Jamova cesta Ljubljana, Slovenija   Jamova cesta 2 SI 1000 Ljubljana, Slovenia Univerza v Ljubljani Fakulteta za gradbeništvo in geodezijo University of Ljubljana Faculty of Civil and Geodetic Engineering Jamova cesta 2 1000 Ljubljana, Slovenija http://www3.fgg.uni-lj.si/ Jamova

More information

Makroekonomija 1: 4. vaje. Igor Feketija

Makroekonomija 1: 4. vaje. Igor Feketija Makroekonomija 1: 4. vaje Igor Feketija Teorija agregatnega povpraševanja AD = C + I + G + nx padajoča krivulja AD (v modelu AS-AD) učinek ponudbe denarja premiki vzdolž krivulje in premiki krivulje mikro

More information

ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University

ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University ECEN 449: Microprocessor System Design Department of Electrical and Computer Engineering Texas A&M University Prof. Sunil P Khatri (Lab exercise created and tested by Ramu Endluri, He Zhou and Sunil P

More information