SDOS_lab01

download SDOS_lab01

of 13

Transcript of SDOS_lab01

  • 8/18/2019 SDOS_lab01

    1/13

    1

    SDOS – Laboratorijske vježbe - Vježba 1

    Na laboratorijskim vježbama iz Sustava za digitalnu obradu signala bavit ćemo se uglavnom

    programiranjem za Blackfin ADSP-BF533, DSP procesor tvrtke Analog Devices. Programi ćese pisati u asemblerskom jeziku za Blackfin procesore te u programskom jeziku C.

    1.  Osnovna arhitektura Blackfin procesora

    Jezgru Blackfin procesora čine:

    1)  aritmetička jedinica za podatke

    2)  adresna aritmetička jedinica

    3)  kontrolna jedinica

    Podatkovna aritmetička jedinica sadrži dva 16-bitna sklopa za množenje, dva 40-bitna

    akumulatora, dvije 40-bitne aritmetičko-logičke jedinice (ALU), četiri 8-bitnih video ALU-a i

    40-bitni bačvasti posmični sklop (engl. barrel shifter ), koji služe za obradu 8-, 16- ili 32-

    bitnih podataka iz podatkovnih registara.

    Procesor sadrži osam podatkovnih 32-bitnih registara (R0 – R7). Pri radu sa 16-bitnim

    podacima, s ovim se registrima radi kao sa 16 neovisnih 16-bitnih registara (R0.L – R7.H).

    Naime, korištenjem oznaka .H i .L može se pristupati gornjoj (H – high) ili donjoj (L – low)

    polovici podatkovnih registara. Svi operandi u aritmetičkim operacijama se uzimaju iz

    registara ili kao konstanta iz same naredbe.

    ALU-i obavljaju uobičajeni skup aritmetičkih i logičkih operacija nad 16- i 32-bitnim

    podacima, uz dodatak posebnih naredbi koje omogućuju bržu obradu raznih signala

    (množenje po modulu 2

    32

    , detekcija broja postavljenih bitova u operandu, istovremenoobavljanje četiri 16-bitne ALU operacije korištenjem obje ALU jedinice i slično).

  • 8/18/2019 SDOS_lab01

    2/13

    2

    40-bitni posmični sklop obavlja operacije logičkog i aritmetičkog posmaka, rotacije,

    postavljanja i ispitivanja vrijednosti bitova...

    Kontrolna jedinica je zaduženja za dekodiranje naredbi, upravljanje redoslijedom njihovog

    izvršavanja, obavljanje grananja i skokova u programu.

    Adresna aritmetička jedinica se koristi za izračun dvije adrese koje služe za istovremeni

    dohvat dva podatka iz memorije. Sadrži četiri skupa registara za rad sa cikličkim poljima (I,

    L, B i M 0-4), te šest 32-bitnih pokazivačkih registra (P0 – P5). Uz njih, tu su i pokazivač na

    stog (SP) i okvir (FP), koji se koriste za rad sa stogom.

    2.  ipovi po!ataka

    Blackfin procesori podržavaju rad s 32-bitnim riječima, 16-bitnim poluriječima i 8-bitnim

    oktetima. 32- i 16-bitni podaci mogu biti cijeli ili frakcionalni brojevi, dok se okteti uvijeksmatraju cijelim brojevima.

    2.1. 

    "ijeli brojevi

    Cijeli brojevi mogu biti sa ili bez predznaka (signed   ili unsigned ). Tako oktet može imati

    opseg vrijednosti od 0 do 255 (unsigned ) ili od -128 do 127 (signed ), a poluriječ  od 0 do

    65535 (unsigned ) ili od -32768 do 32767 (signed ). Pritom se negativni brojevi zapisuju

    korištenjem dvojnog komplementa. Cijeli brojevi kojima je prvi (najvažniji) bit 1 su

    negativni, a oni kojima je 0 su pozitivni. Negativna vrijednost nekog broja a  se može lako

    izračunati tako da se izračuna prvi komplement broja a, pa se njemu doda 1, tj. 1+=−   aa . Na

    primjer, kod 8-bitnih cijelih brojeva s predznakom vrijedi:

    7 = 00000111 111110011111110001000001117   =+=+=−  

    32 = 00100000 1110000011101111110010000032   =+=+=−  

    127 = 01111111 10000001110000000101111111127   =+=+=−  

    Najmanji cijeli broj s predznakom koji se može zapisati s n bitova je 1000...000 = -2n-1

    , dok je

    najveći broj 0111...111 = 2n-1

    -1.

    8-bitni cijeli brojevi s predznakom 16-bitni cijeli brojevi s predznakom

    Binarno Decimalno Binarno Decimalno

    0111 1111 127 0111 1111 1111 1111 32767

    0111 1110 126 0111 1111 1111 1110 32766

    0111 1101 125 0111 1111 1111 1101 32765

    ... ... ... ...

    0000 0010 2 0000 0000 0000 0010 2

    0000 0001 1 0000 0000 0000 0001 1

    0000 0000 0 0000 0000 0000 0000 0

    1111 1111 -1 1111 1111 1111 1111 -1

    1111 1110 -2 1111 1111 1111 1110 -2... ... ... ...

  • 8/18/2019 SDOS_lab01

    3/13

    3

    1000 0010 -126 1000 0000 0000 0010 -32766

    1000 0001 -127 1000 0000 0000 0001 -32767

    1000 0000 -128 1000 0000 0000 0000 -32768

    2.2. 

    #rakcionalni brojevi

    Kod cijelih brojeva ne koristi se decimalna točka, tj. ona se nalazi desno od najmanje

    značajnog bita u broju, tako da svi bitovi imaju težinu jednaku ili veću od jedan. Kod

    frakcionalnog formata zapisa brojeva decimalna se točka nalazi unutar broja, tako da bitovi

    lijevo od točke imaju težinu veću od ili jednaku jedan, dok bitovi desno od točke imaju težinu

    manju od ili jednaku 0,5. Ukupna se vrijednost broja dobiva zbrajanjem težina svih

    postavljenih bitova, kao i kod cijelih brojeva. Pretpostavimo da je neki broj zapisan u formatu

    5.3 ima vrijednost 0101 0011. Ime formata govori da ovaj broj ima 5 binarnih znamenki lijevo

    i tri znamenke desno od decimalne točke.

    težina znamenke 2^4 2^3 2^2 2^1 2^0 1/(2^1) 1/(2^2) 1/(2^3)

    0 1 0 1 0 0 1 1

    Dakle, vrijednost ovog broja je 23 + 2

    1 + 1/2

    2 + 1/2

    3 = 8 + 2 + 0,25 + 0,125 = 10,375

    Razmislimo malo o frakcionalnim brojevima s predznakom tipa 1.2 i 1.3. To su brojevi

    kojima se lijevo od točke nalazi samo znak predznaka (ako je taj bit 0, broj je pozitivan, a ako je 1 onda je negativan), dok su svi ostali bitovi desno od točke. Njima se mogu zapisati

    sljedeći brojevi:

    Format

    1.2 Vrijednost

    Format

    1.3 Vrijednost

    011 0,75 0111 0,875

    010 0,5 0110 0,75

    001 0,25 0101 0,625

    000 0 0100 0,5

    111 -0,25 0011 0,375

    110 -0,5 0010 0,25

    101 -0,75 0001 0,125

    100 -1 0000 0

    1111 -0,125

    1110 -0,25

    1101 -0,375

    1100 -0,5

    1011 -0,625

    1010 -0,75

    1001 -0,875

    1000 -1

  • 8/18/2019 SDOS_lab01

    4/13

    4

    Očito je da dodavanje jedne znamenke nije značajno utjecalo na povećanje raspona

    vrijednosti koje ovi brojevi mogu imati. Naime, brojevi formata 1.X uvijek će imati

    vrijednosti u rasponu [-1, 1>. Međutim, povećanjem broja bitova dobila se finija podjela tog

    raspona.

    Pretpostavimo da u formatu 1.2 trebamo zapisati broj 0,6. Iz gornje tablice je očito da je to

    nemoguće, pa bismo ga aproksimirali kao 010, tj. zapisali bi ga kao broj 0,5 i napravili greškuod 0,6 – 0,5 = 0,1. Ako bismo 0,6 napisali u formatu 1.3 (i dalje ne možemo zapisati to čan

    broj, nego moramo aproksimirati), to bi učinili kao 0101 i tako napravili grešku od 0,625 –

    0,6 = 0,025. Dakle, iako se u formatima 1.2 i 1.3 mogu zapisati brojevi iz istog raspona,

    format s većim brojem bitova može točnije aproksimirati željene vrijednosti.

    U radu s Blackfin procesorima koristit ćemo najčešće frakcionalne brojeve s predznakom tipa

    1.15 i 1.31. To su brojevi koji imaju jedan bit predznaka i 15 odnosno 31 bit desno od

    decimalne točke. I u ovom slučaju je najveća vrijednost koja se može zapisati nekim od ovih

    zapisa uvijek manja od 1, dok je najmanja vrijednost koja se može zapisati jednaka -1.

    Međutim, kao i u gornjem primjeru s formatima 1.2 i 1.3, dodatnih 16 znamenki kod formata

    1.31 u odnosu na 1.15 se koristi za finiju podjelu raspona [-1, 1>, odnosno za pove ćanjepreciznosti zapisa.

    Najveći broj koji se može zapisatu u formatu 1.15 je 0111 111 i on iznosi (0 je oznaka

    pozitivnog predznaka broja i nalazi se lijevo od decimalne točke) 1/(21) + 1/(2

    2) + ... + 1/(2

    15)

    = 0,5 + 0,25 + ... + 0,0000305175 = 0,999969482421875

    Najmanji pozitivni broj u istom formatu je 0000 0001 = 1/(215

    ) = 0,000030517578125.

    Općenito, najveći broj koji se može zapisati u formatu 1.X je 1 – 1/(2x), a najmanji pozitivni

    broj je 1/(2x).

    Pri operacijama zbrajanja i oduzimanja, oba operanda trebaju biti zapisani u istom formatu (sa

    ili bez predznaka, s decimalnom točkom na istoj poziciji), a rezultat operacije bit će također

    iskazan u tom formatu. Međutim, kod množenja to nije slučaj. Operandi mogu biti različitih

    formata, a o njima ovisi i format u kojem će biti zapisan rezultat. Kod Blackfin procesora

    moguće je prilikom množenja specificirati imaju li oba operanda predznak, samo jedan ili

    nijedan. Pozicija decimalne točke u rezultatu može se odrediti na temelju njene pozicije u

    operandima. Produkt dva 16-bitna broja bit će 32-bitni broj. Općenito, ukoliko su operandi

    zapisani u formatu M.N i P.Q, njihov produkt bit će zapisan u formatu (M + P).(N + Q). Na

    primjer, produkt brojeva od kojih je jedan formata 1.15, a drugi formata 13.3, bit će u formatu

    14.18.

    $.  Osnovne operacije s re%istri&a

    $.1. 

    Loa!

    Svi registri (podatkovni, pokazivački, registri za rad s cikličkim poljima) kod Blackfin

    procesora, osim akumulatora A0 i A1, su 32-bitni.

    32-bitna konstanta

  • 8/18/2019 SDOS_lab01

    5/13

    5

    Operacija upisivanja 32-bitne konstante u neki registar obavlja se u dva koraka.

    Pretpostavimo da je u registar R2 potrebno upisati konstantu 0x1A2B3C4D („0x“ označava

    heksadecimalni zapis broja, jedna znamenka predstavlja četiri bita u binarnom zapisu). To se

    može uraditi sljedećim naredbama:

    R2.H = 0x1A2B;

    R2.L = 0x3C4D;Prva naredba u gornju polovicu registra R2 (važnijih 16 bitova registra) upisuje vrijednost

    0x1A2B, dok druga naredba u donju polovicu istog registra upisuje 0x3C4D. Svaka naredba

    završava točkom-zarezom (;).

    Sličan je slučaj i s pokazivačkim registrima. Ako u registar P1 želimo upisati memorijsku

    adresu 0xFF801234 (sve su memorijske adrese kod Blackfin procesora 32-bitne), to ćemo

    učiniti naredbama

    P1.H = 0xFF80;

    P1.L = 0x1234;

    Međutim, ako smo u programu već deklarirali neku varijablu u memoriji, imena moja_var ,

    tada se adresa te varijable u pokazivački registar može upisati s:

    P1.H = moja_var;P1.L = moja_var;

    Naime, procesoru moja_var  nije ništa drugo nego 32-bitna memorijska adresa, a asembler će

    automatski odabrati ispravnu polovicu adrese koju treba upisati u registar ( u .H će upisati

    gornju polovicu adrese, a u .L će upisati donju polovicu).

    16-bitna konstantaAko se u registar želi upisati 16-bitna, a ne 32-bitna vrijednost, to se može napraviti u jednom

    koraku. Neka u registar R3 treba upisati broj 5000 (heksadecimalno 0x1388, dakle 16-bitna

    vrijednost). To bi, naravno, mogli napraviti korištenjem dvije naredbe:

    R3.H = 0x0;

    R3.L = 0x1388;

    Prva naredba briše sadržaj gornje polovice registra R3, a druga u donju polovicu upisuje

    željeni broj. Međutim, isto se može postići i naredbom:

    R3 = 0x1388 (Z); 

    Ova naredba u donju polovicu registra R3 upisuje 16-bitnu vrijednost, dok opcija Z govori da

    se u gornju polovicu registra treba upisati 0. Osim ove opcije, postoji i opcija X, koja u gornju

    polovicu registra upisuje 16 bitova predznaka 16-bitnog broja (0x0 za pozitivne i 0xFFFF za

    negativne brojeve). Pretpostavimo da u registar R5 želimo upisati broj -4 (0xFFFC za 16-

    bitne ili 0xFFFFFFFC za 32-bitne brojeve). To bismo učinili naredbom:

    R5 = 0xFFFC (X);

    Ova naredba u donju polovicu registra upisuje 16-bitni broj -4, dok se gornja polovica punipredznakom (16 jedinica ili 0xFFFF). Tako i registar R5 kao cjelina nakon ove naredbe sadrži

    32-bitni broj -4.

    Obično će se opcija Z koristiti pri radu s brojevima bez predznaka, a opcija X u radu s

    brojevima s predznakom.

    32-bitna varijablaOsim konstanti u registre se može upisivati i sadržaj s neke memorijske lokacije. Tada je

    moguće jednom naredbom napuniti čitav registar, tj. upisati 32 bita (a ne 16 po 16 bitova).

    Neka pokazivački registar P0 sadrži adresu 32-bitne varijable moja_var . Naredbom

    R1 = [P0];

  • 8/18/2019 SDOS_lab01

    6/13

    6

    u registar R1 će se upisati 4 okteta s memorijske adrese sadržane u registru P0, tj. u R1 će se

    upisati vrijednost varijable moja_var . Uglate zagrade [ ] u ovoj naredbi označavaju da se

    naredba odnosi na sadržaj na memorijskoj adresi.

    Vrlo često će se u radu s nizovima (poljima) koristiti naredbe oblika

    R2 = [P3++];

    Kod ove naredbe će se u registar R2 upisati sadržaj s memorijske lokacije čija je adresazapisana u registru P3, nakon čega će se sadržaj registra P3 uvećati za broj okteta koji je

    pročitan iz memorije, u ovom slučaju 4. Ako je prije ove naredbe P3 pokazivao na

    memorijsku adresu 0xFF800004, nakon naredbe sadržaj P3 će biti 0xFF800008. Slično, osim

    ovakvog post-inkrementa, nad pokazivačkim registrom se može raditi i post-dekrement pri

    čemu se sadržaj pokazivačkog registra ne uvećava, nego umanjuje za onoliko koliko je okteta

    pročitano iz memorije:

    R5 = [P2--];

    16-bitna varijablaAko se u memoriji nalaze 16- a ne 32-bitni podaci, tada ćemo iz memorije čitati samo 16

    bitova korištenjem naredbi oblika:R0.H = W [P0]; ili

    R1.L = W [P3];

    Kod ovih naredbi „W“ označava da se iz memorije čita samo 16 bitova (poluriječ). Poluriječ s

    adrese u registru P0 se sprema u gornju polovicu registra R0, dok se dva okteta s adrese u

    registru P3 spremaju u donju polovicu registra R1.

    Korištenjem opcija Z i X moguće je jednom naredbom popuniti cijeli registar iako se iz

    memorije čita samo poluriječ. Ona se sprema u donju polovicu registra, dok se u gornju

    polovicu upisuju nule (opcija Z) ili se puni predznakom (opcija X), kao u naredbama:

    R1 = W [P3] (Z); i

    R4 = W [P2] (X);

    Iako post-dekrement pri čitanju dva okteta iz memorije nije podržan, moguće je obaviti post-

    inkrement nad pokazivačkim registrom, ali uz manje izmjene u odnosu na slučaj s četiri

    okteta. Naime, on se obavlja na sljedeći način:

    P0 = 2 (Z);

    R4.L = W [P3++P0];

    Prvom se naredbom (P0 = 2 (Z); ) u jedan pokazivački registar upiše vrijednost koju ćemo

    kasnije koristiti za inkrementiranje drugog pokazivačkog registra. Druga naredba čita 16

    bitova s memorijske adrese zapisane u pokazivačkom registru (P3) i sprema ih u specificiranu

    polovicu podatkovnog registra (R4.L), nakon čega se sadržaj pokazivačkog registra uveća za

    vrijednost koju smo prethodno upisali u registar P0. Dakle, naredba

    R4.L = W [P3++P0];zamjenjuje dvije naredbe

    R4.L = W [P3];

  • 8/18/2019 SDOS_lab01

    7/13

    7

    inkrement ili dekrement, pri čemu se sadržaj pokazivačkog registra uvećava ili smanjuje za 1

    (budući da je pročitan samo jedan oktet podataka):

    R2 = B [P0++] (Z);

    $.2. 

    Store

    Osim čitanja podataka iz memorije u registre moguće je, naravno, i spremiti podatke iz

    registara u memoriju, i to četiri, dva ili jedan oktet podataka.

    32-bitna varijablaNaredbama

    [P0] = R0;

    [P1] = P2;

    u memoriju se spremaju čitavi registri (32 bita). Prva naredba na memorijsku lokaciju čija je

    adresa sadržana u pokazivačkom registru P0 upisuje sadržaj podatkovnog registra R0. Druga

    naredba na adresu sadržanu u registru P1 upisuje sadržaj pokazivačkog registra P2. I kodnaredbi za pohranu podataka u memoriju mogu se koristiti post-inkrement i dekrement opcije

    nad pokazivačkim registrima, pa bi se nakon naredbi

    [P3++] = R2;

    [P4--] = P5;

    sadržaj registra P3 uvećao, a registra P4 umanjio za 4, budući da se u memoriju spremaju

    četiri okteta podataka.

    16-bitna varijablaZa spremanje gornje ili donje polovice podatkovnog registra (16 bitova) u memoriju koristi se

    oznaka W. Gornju polovicu registra R2 možemo upisati u memoriju na adresu koja piše u

    pokazivačkom registru P1 naredbomW [P1] = R2.H;

    Donju polovicu nekog registra možemo spremiti u memoriju na dva načina:

    W [P3] = R4.L; ili

    W [P3] = R4;

    Budući da se u memoriju upisuju samo dva okteta, u drugoj naredbi se podrazumijeva da se to

    odnosi na donju polovicu registra.

    Kao i u slučaju čitanja 16 bitova iz memorije, ni pri spremanju 16 bitova u memoriju nije

    dozvoljena operacija post-dekrementa nad pokazivačkim registrom. Post-inkrement je

    podržan i obavlja se na sličan način:

    P0 = 2 (Z);

    W [P3++P0] = R4.H;

    Druga naredba obavlja spremanje gornje polovice registra R4 u memoriju na adresu zapisanu

    u registru P3, nakon čega se sadržaj registra P3 (tj. memorijska adresa na koju on pokazuje)

    inkrementira za onoliko koliko piše u registru P0 (za 2). Dakle, naredba

    W [P3++P0] = R4.H;

    zamjenjuje dvije naredbe

    W [P3] = R4.H

  • 8/18/2019 SDOS_lab01

    8/13

    8

    čime se na adresu zapisanu u registru P2 sprema donjih 8 bitova iz registra R2. Pri korištenju

    post-inkrementa i dekrementa, kao u naredbama

    B [P2++] = R2; i

    B [P2--] = R2;

    vrijednost pokazivačkog registra se mijenja za jedan.

    $.$. 

    'ove

    Osim iz memorije u registar te iz registra u memoriju, podaci se mogu prebacivati između

    registara. Čitav sadržaj (32 bita) registra reg1 se može upisati u drugi registar reg2 naredbama

    oblika

    reg2 = reg1;

    gdje su reg1 i reg2 bilo koji podatkovni ili pokazivački registar, na primjer

    P3 = R1;

    Prebacivanje 16 bitova iz jednog registra u drugi moguće je samo među podatkovnim

    registrima, korištenjem opcija Z i X:R0 = R1.L (Z); ili

    R3 = R5.L (X);

    Gornja polovica odredišnog registra (R0 i R3) se puni nulama (opcija Z) ili predznakom

    (opcija X), dok se u donju polovicu odredišnog registra sprema donja polovica izvorišnog

    registra. Naredbe kojima bi se u odredišni registar kopirala gornja, a ne donja polovica

    izvorišnog registra nisu podržane.

    Slično vrijedi i za prebacivanje samo jednog okteta među podatkovnim registrima:

    R0 = R1.B (Z);

    R3 = R5.B (X);

    Može se primijetiti da se osim oznakama .H i .L, dijelovima podatkovnog registra može

    pristupiti i korištenjem oznake .B. Ona označava najmanje važnih 8 bitova promatranogpodatkovnog registra. Ovim naredbama se donji oktet registara R1 i R5 upisuje na donji oktet

    registara R0 i R3, dok se gornjih 27 bitova odredišnih registara puni nulama (R0) ili

    predznakom (R3).

    (.  Struktura ase&blersko% pro%ra&a

    Predložak za pisanje asemblerskog programa izgleda:

    .SECTION data1;

  • 8/18/2019 SDOS_lab01

    9/13

    9

    .GLOBAL _main;

  • 8/18/2019 SDOS_lab01

    10/13

    10

    ).1. 

    *okretanje VisualDS*++VisualDSP++ se pokreće odabirom Start -> Programs -> Analog Devices -> VisualDSP++

    5.0 -> VisualDSP Environment. Ako se na računalu već  pokretao VisualDSP++, a u

    Settings -> Properties je odabrana opcija Reload last project at startup, VisualDSP++ će

    otvoriti posljednji aktivni projekt. Kako biste ga zatvorili, odaberite File -> Close -> Project.

    ).2. 

    reiranje i o!abir sje!niceProjekti se u VisualDSP-u pokreću kao tkz. sjednice za debagiranje. Sjednicu definiraju tri

    elementa:

    •  Procesor – procesor za kojeg se piše program

    •  Tip veze – kontrolira debagiranje projekta, ovisno o tome koja je od tri opcije

    izabrana: simulator (nije potrebno sklopovlje za debagiranje projekta), EZ-KIT Lite

    (za debagiranje je potrebna prava pločica s prethodno navedenim procesorom) ili

    emulator (za debagiranje je potreban poseban sklopovski modul koji emulira rad

    procesora)

    • 

    Platforma – odnosi se na konfiguraciju procesora kojem je projekt namijenjen. Zaodabrani procesor i tip veze može biti ponuđeno više platformi

    Nova se sjednica kreira klikom na Session -> New Session i odabirom sljedećih postavki:

    •  za rad sa simulatorom

    Processor Family: Blackfin

    Target Processor: ADSP- BF533

    Connection Type: EZ-KIT Lite

    Session Name: (ostavite podrazumijevano ime)

    Platform: ADSP-BF5xx Single processor simulator

    • 

    za rad s EZ-KIT Lite pločicomProcessor Family: Blackfin

    Target Processor: ADSP- BF533

    Connection Type: EZ-KIT Lite

    Session Name: (ostavite podrazumijevano ime)

    Platform: ADSP-BF533 EZ-KIT Lite via Debug Agent

    Kada se jednom kreira sjednica, pri sljedećim pokretanjima VisualDSP-a moguće ju je

    odabrati klikom na Session->Select session i odabirom željene sjednice.

    ).$. 

    reiranje projektaKreiranje projekta započinje odabirom File->New->Project, čime se otvara Project Wizard.U njemu se odabere tip projekta (Standard application), odabere ime i odredi lokacija. U

    izborniku Select processor  odabere se ADSP-BF533  iz Blackfin  obitelji procesora. U

    Application settings prozoru odabere se opcija Add template source code to the

    application, a kao željeni jezik se postavi Assembly. Kao željena izlazna datoteka projekta

    odabere se Executable (.dxe)  i klikne Finish. Time se završava kreiranje novog projekta

    kojem je automatski dodana i prva datoteka za izvorni kod.

    ).(. 

    Do!avanje novih i postojeih !atoteka projektu

    Postojeće datoteke s izvornim kodom aktivnom se projektu mogu dodati tako da se nakonklika na Project->Add to project->File(s) odabere jedna ili više datoteka koje želimo dodati.

  • 8/18/2019 SDOS_lab01

    11/13

  • 8/18/2019 SDOS_lab01

    12/13

    12

    Budući da je prethodno odabrana opcija Load executable after build, po završetku uspješnog

    bildanja započet će izvršavanje programa.

    Možete primijetiti da se na početku funkcije main nalaze smeđi krug i žuta strelica. Smeđi

    krug (●) govori da je na toj naredbi postavljena točka prekida (eng. breakpoint ), a žuta strelica(➨) označava da je procesor trenutno zaustavljen na promatranoj naredbi. Kada

    VisualDSP++ učita vaš program u ciljani uređaj (simulator ili stvarni procesor), obično

    automatski postavi nekoliko točaka prekida, na primjer na početku i na kraju koda koji se

    izvršava.

    Moguće je postavljati vlastite točke prekida na željenim naredbama tako što se kursor postavi

    na tu naredbu i pritisne F9.

    Kada program zastane s izvođenjem zbog dolaska do točke prekida moguće je opet pokrenuti

    njegovo izvršavanje i to naredbu po naredbu (pritiskanjem F11) ili do sljedeće točke prekida

    (pritiskom F5).

    )./. 

    *raenje vrije!nosti u re%istri&a i &e&orijiPrilikom debagiranja programa moguće je pratiti promjene vrijednosti u registrima i memoriji

    Blackfina.

    U izborniku Register->Core nudi se mogućnost prikaza sadržaja podatkovnih, pokazivačkih i

    drugih registara Blackfin procesora. Također, moguće je vrijednosti u registrima prikazati kao

    binarne, decimalne ili heksadecimalne vrijednosti, 8-, 16- ili 32-bitne cijele ili frakcionalne

    brojeve sa ili bez predznaka... Potrebno je samo nakon desnog klika u prozor s promatranom

    grupom registara odabrati željeni prikaz vrijednosti:

    Sadržaj memorije može se prikazati odabirom Memory->BLACKFIN memory. Za prikaz

    sadržaja neke memorijske lokacije potrebno je, u za to predviđen text-box, utipkati adresu

    lokacije (npr. 0xFF900008) ili ime varijable koja je pohranjena na toj lokaciji (npr. varijabla

    rijec iz gornjeg primjera asemblerskog programa).

  • 8/18/2019 SDOS_lab01

    13/13

    13

    /.  0a!atak

    Potrebno je napisati asemblerski program u kojem se:

    a)  deklarira i inicijalizira jedna 32-bitna i jedna 16-bitna varijabla

    b) 

    sadržaj 32-bitne varijable upisuje u registar R0 (load)c)  sadržaj registra R0 kopira u registar R1 (move)

    d)  sadržaj 16-bitne varijable upisuje u gornju polovicu registra R2 i donju polovicu

    registra R3 (load + load)

    e)  u 16-bitnu varijablu upisuje gornja polovica 32-bitne varijable (store)

    Po završetku kodiranja bildajte projekt i pokrenite ga. Sve naredbe izvršavajte korak po korak

    (F11), prateći pritom promjene u sadržaju registara (P i R) i memorije.