69
UNIVERZITET U NOVOM SADU FAKULTET TEHNI ČKIH NAUKA UNIVERZITET U NOVOM SADU FAKULTET TEHNIČKIH NAUKA NOVI SAD Departman za računarstvo i automatiku Odsek za računarsku tehniku i računarske komunikacije Diplomski Master rad Кandidat: Milovan Vidović Broj indeksa: 11083 Тema rada: Jedno rešenje TCP mrežnog protokola za Texas Instruments DSP procesore tipa C6000 Мentor rada: prof.dr. Nikola Teslić Novi Sad, jul 2009.

Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

  • Upload
    vukiet

  • View
    229

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

UNIVERZITET U NOVOM SADU

FAKULTET TEHNIČKIH NAUKA

UNIVERZITET U NOVOM SADU

FAKULTET TEHNIČKIH NAUKA

NOVI SAD

Departman za računarstvo i automatiku

Odsek za računarsku tehniku i računarske komunikacije

Diplomski – Master rad

Кandidat: Milovan Vidović

Broj indeksa: 11083

Тema rada: Jedno rešenje TCP mrežnog protokola za Texas Instruments DSP procesore tipa C6000

Мentor rada: prof.dr. Nikola Teslić

Novi Sad, jul 2009.

Page 2: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

UNIVERZITET U NOVOM SADU FAKULTET TEHNIČKIH NAUKА

21000 NOVISAD, Trg Dositeja Obradovića 6

КLjUČNA DOKUMENTACIJSKA INFORMACIJА

Redni broj, RBR:

Identifikacioni broj, IBR:

Tip dokumentacije, TD: Мonografska dokumentacija

Тip zapisa, ТZ: Текstualni štampani materijal

Vrsta rada, VR: Diplomski Master rad

Аutor, AU: Milovan Vidović

Мentor, MN: Prof. Dr. Nikola Teslić

Naslov rada, NR: Jedno rešenje TCP mrežnog protokola za Texas Instruments DSP procesore tipa C6000

Јеzik publikacije, ЈP: Srpski / Latinica

Јеzik izvoda, ЈI: Srpski

Zemlja publikovanja, ZP: Republika Srbija

Uže geografsko područje, UGP: Vojvodina

Godina, ГО: 2009

Izdavač, IZ: Autorski reprint

Мesto I adresa, МА: Novi Sad, Trg dositeja Obradovića 6

Fizički opis rada, FО: (poglavlja/strana)

Naučna oblast, NO: Elektrotehnika i računarstvo

Naučna disciplina, ND: Računarska tehnika

Predmetna odrednica/Kljucne reči, PO:

UDK

Čuva se, ČU: U biblioteci Fakulteta Tehničkih Nauka, Novi Sad

Važna napomena, VN:

Izvod, IZ:

Datum prihvatanja teme, DP: 24.06.2009

Datum odbrane, DO: 17.07.2009

Članovi komisije, КО: Predsednik: dr. Katona Mihajlo

Član: dr. Nebojša Pjevalica Потпис ментора

Član, mentor: prof.dr. Nikola Teslić

Page 3: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

UNIVERSITY OF NOVI SAD FACULTY OF TECHNICAL SCIENCES

21000 NOVI SAD, Trg Dositeja Obradovića 6

KEY WORDS DOCUMENTATION

Accession number, ANO:

Identification number, INO:

Document type, DT: Monographic publication

Type of record, TR: Textual printed material

Contents code, CC: Master Thesis

Author, AU: Milovan Vidovic

Mentor, MN: PhD Nikola Teslić

Title, TI: One solution of TCP network protocol for Texas Instruments DSP processors series C6000

Language of text, LT: Serbian

Language of abstract, LA: Serbian

Country of publication, CP: Republic of Serbia

Locality of publication, LP: Vojvodina

Publication year, PY: 2009

Publisher, PB: Author’s reprint

Publication place, PP: Novi Sad, Dositeja Obradovica sq. 6

Physical description, PD: (chapters/pages/ref./tables/pictures/graphs/appendixes)

Scientific field, SF: Electrical Engineering

Scientific discipline, SD: Computer Engineering, Engineering of Computer Based Systems

Subject/Key words, S/KW:

UC

Holding data, HD: The Library of Faculty of Technical Sciences, Novi Sad, Serbia

Note, N:

Abstract, AB:

Accepted by the Scientific Board on, ASB: 24.06.2009

Defended on, DE: 17.07.2009

Defended Board, DB: President: PhD. Mihajlo Katona

Member: PhD. Nebojša Pjevalica Menthor's sign

Member, Mentor: PhD. Nikola Teslić

Page 4: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

1

Sadržaj

Skraćenice .................................................................................................................................. 2

1 Uvod ................................................................................................................................... 4

2 Opis platforme i razvojnog okruženja ................................................................................ 5

2.1 Opis fizičke arhitekture ............................................................................................... 5

2.1.1 Razvojna ploča TMS320C6455 DSK ................................................................. 5

2.1.2 Procesor TMS 320C6455 ................................................................................... 7

2.2 Programski paketi ........................................................................................................ 9

2.2.1 Programski paket Code Composer Studio .......................................................... 9

2.2.2 Operativni sistem DSP/BIOS ........................................................................... 10

3 Metodologija izrade .......................................................................................................... 11

3.1 Više protokola ........................................................................................................... 11

3.5 Dve granice u TCP/IP modelu .................................................................................. 14

4 Opis rešenja ...................................................................................................................... 28

4.1 BSD programska podrška.......................................................................................... 28

4.3.1 S-funkcija bloka ............................................................................................... 38

4.3.2 Simulink blok ................................................................................................... 39

4.3.3 TLC skripta ...................................................................................................... 40

4.4 Skaler slike (Resizer) ................................................................................................ 43

4.4.1 S-funkcija bloka ............................................................................................... 43

4.4.2 Simulink model ................................................................................................ 44

4.4.3 TLC skripta ...................................................................................................... 45

4.5 H3A blok ................................................................................................................... 47

4.5.1 S-funkcija bloka ............................................................................................... 48

4.5.2 Model bloka ...................................................................................................... 48

4.5.3 TLC skripta ...................................................................................................... 51

Page 5: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

2

4.6 Histogram blok .......................................................................................................... 53

4.6.1 S-funkcija bloka ............................................................................................... 54

4.6.2 Model bloka ...................................................................................................... 54

4.6.3 TLC skripta ...................................................................................................... 55

5 Ispitivanje ......................................................................................................................... 58

5.1 Ispitivanje CMOS senzor bloka ................................................................................ 59

5.2 Ispitivanje skalera slike ............................................................................................. 61

5.3 Ispitivanje H3A bloka ............................................................................................... 61

5.4 Ispitivanje histogram bloka ....................................................................................... 62

6 Zaključak .......................................................................................................................... 63

7 Literatura .......................................................................................................................... 64

8 Dodatak ............................................................................................................................. 65

8.1 Podizanje sistema iz NAND memorije ..................................................................... 65

8.2 Primer modela za prenosa slike preko LAN-a ......................................................... 66

Skraćenice

CCD - Charge-Coupled Device

CCS - Code Composer Studio

Page 6: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

CMOS - Complementary Metal–Oxide Semiconductor

CSL - Chip Support Library

DDR - Double Data Rate

DAC - Digital to Analog Converter

DRAM - Dynamic RAM

DSP - Digital Signal Processor

EMIF - External Memory Interface

EPROM - Erasable Programmable ROM

EVM - Evaluation module

I2C - Inter-Integrated Circuit

IDE - Integrated Development Enviroment

ISRAM - Internal SRAM, Interna statička RAM memorija (unutar DSP)

JTAG - Joint Test Action Group

LAN - Local Area Network

LED - Light Emitting Diode

NTSC - National Television System(s) Committee

OSD - On Screen Display

PAL - Phase Alternation Line

PC - Personal Computer

PCI - Periferal Component Interconect

PCM - Pulse Code Modulation

PWM - Pulse Width Modulation

RAM - Random Access Memory

RGB - Red-Green-Blue output

ROM - Read-Only Memory

SRAM - Static Random Access Memory

TI - Texas Instruments

Page 7: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

4

1 Uvod

Sa porastom upotrebe računara raste potreba i korišćenje digitalne obrade signala.

Digitalna obrada signala (DSP) je nauka koja se bavi signalima u digitalnoj reprezentaciji i

metodima njihove obrade. Algoritmi koji se koriste kod digitalne obrade signala se često

implementiraju na specijalizovanim mikroprocesorima koji se zovu “procesori za digitalnu

obradu signala” (takođe DSP). Kod njih se obrada signala izvršava u realnom vremenu.

Programiranjem DSP procesora u asembleru je najpribližnije mašinskom jeziku, ali

mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost

konvertovanja na drugu procesorsku platformu. Zbog toga se koriste viši programski jezici

kao što je C programski jezik. Pisanje u višem programskom jeziku za DSP procesore

donekle je oslobođeno vođenje računa o svakom registru i toku podataka ali još uvek je

potrebno poznavanje platforme zbog specifičnih načina rada i korišćenja resursa.

Za pisanje programske podrške za određenu platformu potrebno je poznavati

podržani programski jezik i arhitekturu platforme.

Zadatak ovog projekta je realizacija transportnog servisa pouzdanog toka podataka

(TCP) , na Texas Instruments DSP C6000 platformi procesora . Pored protokola potrebno je

realizovati i korisničku programsku spregu, po uzoru na BSD socket API (Berkeley socket

aplication programming interface). Protokol treba da poseduje i mehanizme poboljšanja

performansi prenosa podataka kao sto su klizni prozori, kontrole zagušenja itd.

Page 8: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

5

2 Opis platforme i razvojnog okruženja

2.1 Opis fizičke arhitekture

2.1.1 Razvojna ploča TMS320C6455 DSK

Razvojna platforma TMS320C6455 DSK samostalna razvojna platforma, koja omogućava

korisnicima razvoj i ispitivanje aplikacija za TI (eng.Texas Instruments) C64xx DSP familiju

procesora. Razvojna ploča takođe služi i kao referentni hardverski dizajn za TMS320C6455

DSP. Šeme, logičke jednačine i aplikacione stavke omogućavaju lakši hardverski razvoj i

time utiču na smanjenje vremena izlaska uređaja na tržište (eng. TTM Time To Market ) .

Slika 1 – Izgled DM6437 EVM ploče

Glavni elementi koje ploča sadrži su:

• Texas Instruments TMS320C6455 procesor koji radi na frekvenciji 1 Ghz.

• AIC23 stereo kodek

• Softverska konfiguracija ploče kroz registre implemenetirane unutar CPLD-a

• 128 MB DDR2 DRAM memorije

• 4 MB spolja ne promeljive fleš memorije

• I2C sprega

• 10/100 MBS mrežna sprega

• Podesive opcije za podizanje (eng. Boot ) sistema

• Ugrađena JTAG sprega

Page 9: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

6

• 4 LED i 4 preklopnika za potrebe korisnika

• Napajanje (+5V)

• Priključci za dodatne kartice i proširivanje mogućnosti

Slika 2 – Dijagram TMS320C6455 EVM ploče

DSP processor koji se nalazi na C6455 DSK razvojnoj ploči je sa periferijom spregnut

preko 64’bitne magistrale EMIFA (engl. External Memory Interface). CPLD i konektor za

dodatnu karticu su takođe vezani za EMIFA magistralu. DDR2 memorija poseduje zasebnu

magistralu za vezu sa procesorom. AIC23 kodek omogućava procesoru da šalje i prima

analogne signale. I2C magistrala se koristi za kontrolu kodeka i periferije dok se MCBSP

(engl. Mullti Chanel Buffered Serial Port ) koristi za podatke. Ploča poseduje četiri analogna

priključka od 3.5mm koji predsavljaju linijski ulaz i ulaz za mikrofon, kao i linijski izlaz i

izlaz za slušalice. Aktivni ulaz može biti bilo mikrofon bilo linijski ulaz u zavisnosti od

selekcije na kodeku. Oba izlaza su u svakom trenutku aktivna sa raylikom što izlaz na

slušalicama može biti promenljivog pojačanja. MCBSP magistrale mogu biti prerutirane na

periferijski konektor programski. CPLD (engl. Complex Programmable Logic Device)

implementira logiku koja omogućava povezivanje komponenti na ploči. CPLD poseduje

korisničku spregu preko registara čijim pisanjem i čitanjem se vrši konfiguracija ploče. Fleš

memorija je mapirana u CE3 prostor. Razvojna ploča poseduje 10/100 Mb mrežni

priključak.Takođe na ploči postoje četiri LE (engl. Light Emitted) diode i četiri DIP (engl.

Dual in Package) prekidača koji predstavljaju prost način interakcije sa korisnikom. I

diodama i prekidačima se pristupa čitanjem ili pisanjem CPLD registara.

Page 10: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

7

Za napajanje se koristi spoljni izvor od 5V. Naponski regulatori na ploči omogućavaju

1.2 V za jezgro procesora, 1.8 V za DDR memoriju. Ploča se održavau reset stanju dok se ne

obezbede potrebni naponski nivoi. Code Composer komunicira sa razvojnom pločom preko

JTAG USB emulatora. Takodje može se koristiti i eksterni JTAG emulator koji se sa pločom

povezuje preko 60-pinskiog ili 14-pinskog konektora.

2.1.2 Procesor TMS 320C6455

Sam procesor serije TMS320C6455 pripada TMS320C64x+ DSP generaciji procesora

najviših performansi u nepokretnom zarezu.

Slika 3 – Funkcionalni blok dijagram C6455 procesora

Page 11: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

8

C6455 pripada trećoj generaciji procesora visokih performansi sa VLIW(engl. Very

Long Instruction Word) arhitekturom razvijenom od strane TI (engl. Texas Instruments), i

kao takav predstavlja odličan izbor za aplikacije sa video obadom, u telekomunikacijam,

bežičnim vezama itd. Baziran na 90 nm tehnilogiji izrade i sa mogučnostima sa preko 9600

milona instrukcija u sekundi pri taktu od 1.2 GHz, omogućava programska rešenja visokih

performansi.

C6455 DSP koristi osam funkcionalnih jedinica, dve registarske datoteke, i dva toka

podataka. Kao i prethodni C6000 procesori dve od osam funkcionalnih jedinica su množači.

Svaki C6455 množač udvostručava propusnu moć jezgra izvršavajući četiri 16b x 16b MAC

instrukcije u jednom taktu.

C6455 ukljucuje i serijski RapidIO. Ova brza periferija dramatično uvećava

performanse sistema i redukuje cenu sistema koji zahteva više DSP procesora na ploči.

C6455 DSP objedinjuje veliku količinu memorije organizovanu u memrijski sistem sa

dva nivoa. Na nivou 1 i programska i memorija podataka su po 32KB. Ova memorija može

biti konfigurisana kao mapirana RAM ili skrivena (engl. casche), ili kombinacija ove dve.

Konfigurisana kao skrivena, L1 programska je direktno mapirana skrivena dok je L1 sa

podacima u stvari asocijativna skrivena memorija. L2 memorija je deljena između

programskog i prostora podataka a veličine je 2096KB. L2 memorija takođe može biti

konfigurisana kao mapirani RAM, skrivena ili kombinacija ove dve. C6255 megamodul

takođe ima 32-bitni periferni konfiguracioni port, interni DMA kontroler, sistemsku

komponentu sa reser/boot kontrolom, kontrolu prekida i izuzetaka, kontrolu pada napona

napajanja i 32-bitni brojac za vremenske pečate.

Pod periferijom se podrazumeva: I2C (engl. Inter integrated circuit) magistrala, dva

MCBSP porta, 8-bitnu spregu za asihroni transfer, dva 64-bitna opšte namenska brojača

(moguće ih podesiti da rade kao četiri 32-bitna), PCI magistrala, 16 bitni opšte namenski

ulazno izlazni port, 10/100 Mb/s mrežni kontroler.

I2C port na C6455 procesoru omogućava laku kontrolu perifernih uredjaja, odnosno

komunikaciju procesora i periferije. MCBSP se može koristiti za komunikaciju sa serijski

periferijskim interfejsom (SPI).

C6455 procesor poseduje dva ko-procesora visokih performansi VCP2 i TCP2 koji

značajno ubrzavaju operacije dekodiranja na čipu.

C6455 poseduje kompletan set razvojnih alata koji uključuju C kompajler,

asemblersku optimizaciju i Windows alat za otkrivanje grešaka.

Page 12: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

9

2.2 Programski paketi

2.2.1 Programski paket Code Composer Studio

Code Composer Studio (Slika 7) je integrisano okruženje za razvoj IDE (eng. Integrated

Development Enviroment) koje donosi alate za sve platforme i podršku za razvoj projekata

na bazi TMS320 DSP procesora.

IDE uključuje podršku za DSP/BIOS, mogućnost analize u realnom vremenu, alate za

kontrolisano izvršavanje programa i optimizaciju, C/C++ prevodilac, asemplerski prevodilac,

vizualno upravljanje projektom i razne simulatore i emulacione rukovaoce uređaja.

Slika 4 – Programski paket Code Composer Studio

Page 13: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

10

2.2.2 Operativni sistem DSP/BIOS

DSP/BIOS operativni sistem je sistem za rad realnom vremenu i podrškom za paraleno

izvršavanje više niti, specijano projektovan za platforme na bazi procesora TMS320C6000™,

TMS320C5000™, and TMS320C28x™. DSP/BIOS donosi standardizovane API (eng.

Application Programming Interface) funkcije za C6000, C5000 i C28x DSP platforme i

optimizovan je za koriščenje na DSP jezgrima u OMAP (eng. Open Multimedia Application

Platform) uređajima. DSP/BIOS je moguće koristiti samostalano ili kao integralni deo Code

Composer Studio IDE i uključuje grafičko podešavanje elemenata sistema. Namenjen je za

rad u realnom vremenu, kreiranju, raspodeli, sa alatima za analizu u realnom vremenu

fokusiran na otkrivanje grešaka i podešavanje sinhronizacije niti(eng. Thread).

Page 14: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

11

3 Metodologija izrade

3.1 Više protokola

Protokol omogućuje da se definiše ili razme komunikacija pri čemu nije neophodno

poznavanje detalja mrežmnog hardvera određenog proizvođača. Protokoli su za računarsku

komukikaciju ono što su programski jezici za računarsku obradu. Složeni sisemi za prenos

podataka ne koriste jedan protokol za obavljanje svih poslova prenosa. Oni zahtevaju skup

protokola koji sarađuju i koji se ponekada nazivaju familijom protokola. Zašto je ovo ovako

vidi se iz problema koji nastaju prilikom komuniciranja računara preko mreže za prenos:

Kvar hardvera. Računar ili usmerivač mogu da otkažu zbog kvara hardvera ili

pada operativnog sistema. Mrežna veza za prenos podataka može da otkaže ili

da se slučajno prekine. Softver protokola treba da detektuje takve kvarove ili

ako je moguće da ih otkloni

Zagušenje mreže. Čak i kada hardver i softver pravilno rade, mreža ima

ograničen kapacitet koji može da bude prekoračen. Softver protokola treba da

se pobrine za slučaj da zagušeni računar onemogući dalji tok saobraćaja.

Kašnjenje ili gubitak paketa. Ponekad paketi mogu izuzetno mnogo da kasne

il da se izgube. Softver protokola treba da bude upoznat sa neuspelim

prenosima ili da se prilagodi dugim kašnjenjima.

Oštećenje podataka. Električne ili magnetne smetnje ii kvarovi hadvera mogu

da izazovu greške u prenosu koje kvare sadržaj podataka koji se prenose.

Softver protokola treba da otkrije i otkloni takve greške.

Dupliranje podataka ili prenos obrnutim redom. Mreže koje sadrže više

puteva mogu da prenesu podatke izvan redosleda ili da prenesu duplicate

paketa. Softver protokola treba da preuredi pakete i da ukloni duplicate.

Ako se posmatraju svi zajedno, ovi problemi izgledaju nesavladivo. Teško je razumeti

kako može da se napiše jedan protokol koji će se pobrinuti za sve ove probleme. Podelom

ovih problema na koncepcijske potprobleme moguće je doći do rešenja. Ova podela

omogućuje da se projektant usredsredi na jedan potproblem i da realizator nezavisno napiše i

testira svaki deo programske podrške.

Page 15: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

12

3.2 Koncept slojeva protokola

Softverski moduli protokola su po konceptu na svakom računaru složeni vertikalno u

slojeve kao na slici 5.

Slika 5 – Koncepcijska organizacija softvera protokola u slojevima

Koncepcijski, slanje poruke iz aplikacije na jednom računaru u aplikaciju na drugom

računaru ynači prenos poruke nadole, kroz uzastopne slojeve protokola na računaru

pošiljaocu, prosleđivanje poruke kroz mrežu i prenos poruke nagore kroz uzastopne

slojeve protokola na računaru primaocu. Svaki sloj donosi odluke o ispravnosti poruke i

bira odgovarajuću akciju zasnovanu na tipu poruke ili odredišnoj adresi.

3.3 Petoslojni TCP/IP referentni model

TCP/IP protokol stek je organizovan u pet koncepcijskih slojeva – četiri softverska

sloja koji se nadograđuju na peti, hardverski sloj. Na slici 6 su prikazani koncepcijski

slojevi kao i oblik podataka koji se prenose između njih.

Slika 6. Koncepcijski slojevi TCP/IP protokol steka

Aplikacija

Transport

Internet

Mreža

Hardver

Poruke ili tokovi

Segmenti

IP datagrami

Okvir svojstveni mreži

Sloj 2

.....

Sloj n

Pošiljalac

Sloj 1

Sloj 2

.....

Sloj n

Primalac

Sloj 1

Mreža

Page 16: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

13

3.3.1 Sloj aplikacija

Na najvišem nivou, korisnik poziva aplikacije koje pristupaju servisima raspoloživim

preko TCP/IP interneta. Aplikacija komunicira sa jednim od protokola transportnog sloja

da bi poslala ili primila podatke. Svaka aplikacija bira odgovarajući stil transporta koji

može da bude niz pojedinačnih poruka ili kontinualan tok bajtova. Aplikacija predaje

podatke u zahtevanom obliku transportnom sloju da bi podaci bili preneseni.

3.3.2 Transportni sloj

Glavna dužnost transportnog sloja jeste da obezbedi komunikaciju od jedne do druge

aplikacije. Takva komunikacija se često naziva komunikacijom od jednog do drugog

kraja veze. Transportni sloj može da reguliše protok informacija. On takođe može da

obezbedi pouzdan transport osiguravajući da podaci stižu bez greškei po redu. Da bi se

ovo postiglo, softver transportnog protokola omogućuje da prijemna strana vrača potvrde

prenosa i da predajna strana ponovo šalje izgubljene pakete. Transportni softver deli tok

podataka koji se prenose u pakete i svaki paket zajedno sa odredišnom adresom predaje

sledećem sloju radi prenosa. Iako je na Slici 6. za predstavljanje sloja aplikacije

upotrebljen jedan blok, računar opšte namene može da ima više aplikacija koje

istovremeno pristupaju internetu. Transportni sloj može da prihvati podatke iz nekoliko

korisničkih programa i da ih pošalje u sledeći niži sloj. Da bi to učinio, on svakom paketu

dodaje dopunske informacije, ukjljučujući kodove koji identifikuju koja aplikacija ga je

poslala i koja aplikacija treba da ga prim, kao i kontrolni zbir. Prijemni računar koristi

kontrolni zbir da bi proverio da li je paket stigao neoštećen, a oderedišni kod da bi

identifikovao aplikaciju koja treba da primi paket.

3.3.3 Internet sloj

Internet sloj upravlja komunikacijom od jednog do drugog računara. Ovaj sloj

prihvata zahtev za slanje paketa iz transporntog sloja zajedno sa identifikacijom računara

na koji paket treba da bude prenesen. On enkapsulira paket u IP datagram, popunjava

zaglavlje datagrama, koristi algoritam usmeravanja kako bi odredio da li da datagram

prenese direktno ili da ga pošalje na usmerivač i prosleđuje datagram odgovarajućem

mrežnom interfejsu kako bi bio dalje prenesen. Internet sloj takođe upravlja dolaznim

datagramima proveravajući njihovu punovažnost i koristi algoritam usmeravanja kako bi

odlučio da li datagram treba a bude lokalno obrađen ili prosleđen. Za datagrame koji su

adresirani nalokalni računar, softver u internet sloju briše zaglavlje datagrama i između

nekoliko transportnih protokola bira onaj koji će rukovati paketom. Konačno, internet sloj

po potrebi prima i šalje ICMP poruke o greškama i kontrolne poruke.

3.3.4 Sloj Mreže

Najniži nivo TCP/IP softvera čini sloj mrežnog interfejsa koji je odgovoran za

prihvatanje IP datagrama i njihov prenos preko određene mreže. Mrežni interfejs može da

se sastoji od upravljačkog programa uređaja (na primer kada je mreža lokalna računarska

mreža na koju se računari direktno priključuju) ili složeni podsistem koji koristi sopstveni

Page 17: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

14

protokol za veze podataka (na primer kada se mreža sastoji od komutatora paketa koji

komuniciraju sa računarima koristeći HDCL).

3.4 Princip uslojavanja

Protokoli uslojavanja su osmišljeni tako da sloj n na odredištu prima tačno isti onaj

objekat koji je poslao sloj n na izvoru. Uslojavanje omogućuje projektantu protokola da

usmeri pažnju samo na jedan sloj, ne brinući o ponašanju drugih slojeva. Projektaktanti

pretpostavljaju da aplikacija na jednom računaru prima tačno one podatke koje šalje

aplikacija na drugom računaru:

Računar A Računar B

Slika 7. Putanja poruke prilikom njenog prolaska iz aplikacije

na jednom računara do aplikacije na drugom računaru

3.5 Dve granice u TCP/IP modelu

Koncepcijsko uslojavanje protokola obuhvata dve granice :

Adresnu granicu protokola koja odvaja adresiranje visokog nivoa od

adresiranja niskog nivoa

Granica operativnog sistema koja odvaja sistem od aplikacija

Slika 8. Granice TCP modela

Aplikacija

Transport

Internet

Mreža

Aplikacija

Transport

Internet

Mreža

Fizička mreža

Identična poruka

Identičan paket

Identičan datagram

Identičan okvir

Transport

Internet

Mreža

Hardver

Koriste se samo fizičke adrese

Koriste se samo IP adrese

Softver unutar operativnog sistema

Aplikacija Softver van operativnog sistema

Page 18: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

15

3.5.1 Adresna granica protokola visokog nivoa

Ova granica deli softver koji koristi fizičke adrese niskog nivoa od softvera koji

koristi adrese visokog nivoa.

3.5.2 Granica operativnog sistema

Ova granica predstavlja podelu između softvera koji se po pravilu smatra delom

operativnog sistema i softvera koji to nije.

3.6 Transportni servis pouzdanog toka podataka (TCP)

TCP (engl. Transmission Control Protocol) predstavlja nezavistan protokol opšte

namene koji može da se prilagodi za korišćenje sa ostalim sistemima prenosa. Na primer,

pošto TCP pravi veoma malo pretpostavki o mreži na kojoj se zasniva njegov rad, on može

da se koristi za prenos preko jedne mreže kao što je eternet, kao i preko složenijeg interneta.

Na najnižem nivou, računarske komunikacione mreže obezbeđuju nepouzdan prenos

paketa. Paketi mogu da budu izgubljeni ili oštećeni kada se greške u prenosu pomešaju sa

podacima, kada otkaže mrežni hardver ili kada mreže postanu toliko preopterećene da ne

mogu da prihvate ceo saobraćaj koji se u njih upućuje. Mreže koje dinamički usmeravaju

pakete mogu da ih predaju izvan redosleda , da ih prenesu sa znatnim zakašnjenjem ili da

prenesu duplikate. Štaviše, mrežne tehnologije mogu da diktiraju optimalnu veličinu paketa

ili da postave druga ograničenja kako bi se postigle efikasne brzine prenosa.

3.6.1 Svojstva servisa pouzdanog toka

Sprega između aplikacija i TCP/IP protokola može da se okarakteriše pomoću pet

svojstava:

Orijentacija na tok. Kada dve aplikacije prenose velike količine podataka,

podatke posmatramo kao tok bitova, podeljen u 8 bitne oktete (bajtove). Servis

prenosa toka na odredišnom računaru predaje primaocu potpuno isti niz okteta

koji pošiljalac predaje ovom servisu na izvornom računaru

Veza preko virtuelnog kola. Uspostavljanje prenosa toka analogno je

upućivanju telefonskog poziva. Da bi prenos mogao da započne, predajna i

preijemna strana sarađuju sa svojim operattivnim sistemim, obaveštavajući ih

o nameri prenosa toka. Koncepcijski, jedna aplikacija upućuje poziv koji

druga aplikacija mora da prihvati. Softverski moduli protokola u dva

operativna sistema komuniciraju slanjem poruka preko interneta,

proveravajući da li postoji ovlašćenje za prenosi da li su obe strane spremne.

Kada svi detalji budu dovedeni u red, moduli protokola obaveštavaju

Page 19: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

16

aplikacije da je veza uspostavljena i da prenos može da počne. Za vreme

prenosa, softver protokola na dva računara nastavlja da komunicira da bi

proverio da li su podaci pravilno primljeni. Ako komunikacija iz bilo kog

razloga ne uspe, oba računara detektuju kvar i obaveštavaju o njemu

odgovarajuće aplikacije. Takve veze nazivamo virtuelno kolo, jer je

pouzdanost samo privid koji obezbeđuje servis prenosa toka, iako aplikacije

vide vezu kao namensko hardversko kolo.

Prenos uz korišćenje bafera. Aplikacije šalju tok podataka preko virtuelnog

kola neprekidno prenoseći oktete podataka softveru protokola. Prilikom

prenosa podataka svaka aplikacija koristi onu veličinu delova poataka koja je

podesna za tu aplikaciju, što može da bude i samo jedan oktet. Na prijemnom

kraju , softver protokola predaje oktet iz toka podataka tačno istim redosledom

kojim su poslati, stavljajući ih na raspolaganje prijemnoj aplikaciji odmah

posle prijema i proveravanja. Softver protokola može slobodno da podeli tok u

pakete, nezavisno od veličine delova koje prenosi aplikacija. Da bi prenos bio

efikasniji i da bi se minimizovao mrežni saobraćaj, implementacije obično

sakupljaju dovoljno podataka iz toka da bi popunile datagram razumne

veličine pre nego čto ga pošalju preko interneta. Prema tome, čak i ako

aplikacija proizvodi tok generišući jedan po jedan oktet, prenos preko

interneta može da bude sasvim efikasan. Slično tome, ako se aplikacija

opredeli za generisanje izuzetno velikih blokova podataka, softver protokola

može da izabere da svaki blok podeli na manje delove koji će se prenositi. Za

one aplikacije kod kojih podaci treba da se prenesu čak i ako ne popune bafer,

servis pouzdanog toka obezbeđuju mehanizam prisilnog prenosa koji

aplikacije koriste da bi nametnule prenos. Na predajnoj strani, mehanizam

prisilnog prenosa koji aplikacije koriste da bi nametnule prenos. Na predjanoj

strani, mehanizam prisilnog prenosa primorava softver protokola da prenese

sve podatke koji su generisani, bez čekanja da se bafer popuni. Kada podaci

stignu na prijemnu stranu, ovaj mehanizam prouzrokuje da ih TCP stavi na

raspolaganje aplikaciji bez kašnjenja. Međutim, čak i kad je prenos nametnut,

softver protokola može da izabere da podeli tok na neočekivane načine.

Nestruktuirani tok. Servis pozdanog toka podataka ne poštuje tokove

srtruktuiranih podataka. Aplikacije koje koriste servis toka moaju da razumeju

sadržaj toka i da se salase o formatu toka pre nego što započnu vezu.

Puna dupleks veza. Veze koje obezbeđuju TCP/IP servis toka omogućuju

istovremeni prenos u oba smera. Iz perspektive aplikacionog procesa, puna

dupleksna veza se sastoji se od dva nezavisna toka koji protiču u suprotnim

smerovima, bez vidljive interakcije.Servis toka omogućuje aplikacionom

procesu da prekine protok u jednom smeru dok podaci nastavljaju da protiču u

drugom smeru, što vezu čini polu dupleksom. Prednost pune dupleksne veze

je u tome što softver odgovarajućeg protokola može da izvoru vraća kontrolne

informacije za jedan tok u datagramima koji prenose podatke u suprotnom

Page 20: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

17

smeru. Ova tehnika šlepovanja (engl. piggybacking) datagrama jednog smera

za prenos informacija o drugom smeru smanjuje mrežni saobraćaj.

3.6.2 Pouzdanost u prenosu

Servis pouzdanog prenosa toka garantuje prenos toka podataka poslatih sa jednog

računara na drugi bez dupliranja ili gubitka paketa. Većina pouzdanih protokola koristi

osnovni postupak poznat kao pozitivno potvrđivanje sa pouzdanim prenosom. Ovaj

postupak zahteva od primaoca da komunicira sa izvorom, vraćajući mu poruku potvrde

prenosa (engl. acknowledgement) kada primi podatke. Pošiljalac čuva zapis o svakom

paketu koji pošalje čeka na potvrđivanje prenosa pre nego što pošalje sledeći paket. On

takodje aktivira brojač vremena kada počalje paket i ponovo šalje paket ako vreme

brojača istekne pre nego što potvrda prenosa stigne. Sledeća slika prikazuje

nejjednostavniji protokol pozitivnog potvrđivanja:

Slika 9. Protokol koji koristi pozitivno potvrđivanje

Na slici 9 događaji na strani pošiljaoca i primaoca su levo i desno, respektivno.

Svaka dijagonalna linija koja prolazi kroz sredinu prikazuje prenos jedne poruke preko

mreže. Na slici 10 je prikazano šta se dešava kad se paket izgubi ili ošteti. Posle slanja

paketa pošiljalac pokreće brojač vremena. Kada vreme brojača istekne, pošiljalac smatra

da je paket izgubljen i ponovo ga šalje. Isprekidana linija pokazuje vreme koje bi bilo

potrebno za prenos paketa i njegovog potvrđivanja u slučaju da paket nije izgubljen.

Događaji na strani pošiljaoca Mrežne poruke Događaji na strani primaoca

Slanje pakta 1

Prijem paketa 1

Slanje potvrde 1

Prijem potvrde 1

Slanje paketa 2 Prijem paketa 2

Slanje potvrde 2

Prijem potvrde 2

Page 21: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

18

Slika 10. Vreme obustavljanja čekanja i ponovnog prenosa

Poslednji problem pouzdanosti nastaje kada sistem prenosa duplira pakete. Duplikati

mogu takođe da nastanu kada se u mreži javljaju velika kašnjenja koja izazivaju

povremeni ponovni prenos. Rešavanje problema dupliranja zahteva pažljivo razmatranje

jer mogu da budu duplirani i paketi i potvrde. Pouzdani protokoli obično detektuju

dupliranje paketa dodeljivanjem rednog broja svakom paketu i zahtevom da primalac

pamti koji redni broj je primio. Da bi se izbegla zabuna koju izazivaju potvrđivanja koja

kasne ili su duplirana, protokol pozitivnog potvrđivanja vraća redne brojeve u potvrdama

prenosa tako da primalac može tačno da ih pridruži paketima.

3.6.3 Klizni prozori

Postupak kliznih prozora predstavlja složeniji oblik pozitivnog potvrđivanja i

ponovnog prenosa. Protokoli kliznih prozora bolje koriste mrežni opseg, jer omogućavaju

pošiljaocu da pošalju više paketa dok čeka na potvrđivanje. Ako je paket poslat, ali za

njega nije primljena potvrda prenosa, kažemo da je paket nepotvrđen. Tehnički, broj

paketa koji može da bude ne potvrđen u bilo kom vremenu ograničen je veličinom

prozora i obično prestavlja mali celibroj. Na primer u nekom protokolu gde je veličina

kliynog prozora 8, pošiljaocu je dozvoljeno da prenese 8 paketa pre nego što primi

potvrdu prenosa. Rad protokola kliznog prozora zavisi od veličine prozora i brzine kojom

mreža prihvata podatke. Na slici 11 je prikazan primer funkcionisanja protokola kliznog

prozora prilikom slanja tri paketa. Sa veličinom prozora 1, protokol kliznog prozora je

potpuno isti kao jednostavan protokol pozitivnog potvrđivanja. Povećanjem veličine

prozora moguće je potpuno eliminisati vreme mirovanja mreže. Drugim rečima, u

stabilnom stanju pošiljalac može da šalje pakete onom brzinom kojom mreža može daih

prenosi. Osnovna zamisao je da dobro podešen protokol kliznog prozora održava mrežu

potuno zasićenu paketima i samim tim obezbeđuje znatno veću propusnu moć nego

Događaji na strani pošiljaoca Mrežne poruke Događaji na strani primaoca

Slanje pakta 1

Paket bi trebalo da stigne

Trebalo bi da bude poslata

poruka Potvrda bi trebalo da

stigne u ovom trenutku

Slanje paketa 2

Prijem paketa 1

Slanje potvrde 1 Prijem potvrde 1

Izgubljen paket

Pokretanje brojača

Ponovno slanje paketa 1

Pokretanje brojača

Zaustavljanje brojača

Page 22: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

19

jednostavan protokol koji za slanje sledećeg paketa obavezno čeka na potvrdu prijema

prethodnog.

Slika 11. Klizni prozor veličine 3

TCP korisiti specijalizovan mehanizam kliznog prozora da bi rešio dva važna

problema: efikasan prenos i kontrolu protoka. TCP mehanizam kliznog prozora radi na nivou

okteta, a ne na nivou segmenta ili paketa. Okteti toka podataka numerisani su redom , a

pošiljalac održava tri pokazivača pridružena svakoj vezi. Pokazivači definišu klizni prozor.

TCP dozvoljava da se veličina prozora menja u toku vremena. Svako potvrđivanje prenosa u

kome se navodi koliko je okteta primljeno sadrži oglašavanje prozora u kome se navodi

koliko dodatnih okteta podataka je primalac spreman da prihvati. Oglašavanje prozora

možemo posmatrati kao da određuje trenutnu veličinu bafera primaoca. Kao odgovor na

oglašavanje povećanog prozora, pošiljalac povećava svoj klizni prozor i nastavlja da šale

oktete čiji prijem nije potvrđen. Kao odgovor na oglašavanje smanjenog prozora, pošiljalac

smanjuje svoj prozor i prekida slanje okteta van granice. Prednost korišćenja prozora

promenljive veličine je to što on obezbeđuje kontrolu protoka kao i pouzdan prenos. Da bi

izbegao prijem više podataka nego što može da prihvati, primalac šalje oglašavanja manjeg

prozora za vreme dok se njegov bafer puni. U ekstrenom slučaju primalac oglašava veličinu

prozora nula da bi potpuno prekinuo prenos. Kasnije kad se prostor u baferu oslobodi,

primalac oglašava veličinu prozora različitu od nule kako bi ponovo pokrenuo prenos.

Postojanje mehanizma kontrole protoka je od suštinske važnosti u internet okruženju, gde

računari različitih brzina i veličina komuniciraju preko mreža i usmerivača različitih brzina i

kapaciteta. Postoje dva nezavisna problema protoka. Prvo, internet protokolima je potrebna

kontrola protoka od jednog do drugog kraja veze, odnosno između izvorišta i odredišta.

Drugo, internet protokolima je potreban mehanizam za kontrolu protoka koji dozvoljava da

posredni sistemi kontrolišu izvor koji zalje više saobraćaja nego što to mašina može da

podnese.

Događaji na strani pošiljaoca Mrežne poruke Događaji na strani primaoca

Slanje paketa 1

Prijem potvrde 1

Slanje paketa 2

Slanje paketa 3

Prijem potvrde 2

Prijem potvrde 3

Prijem paketa 1

Slanje potvrde 1

Prijem paketa 2

Slanje potvrde 2

Prijem paketa 3

Slanje potvrde 3

Page 23: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

20

3.6.4 Pasivna i aktivna otvaranja

Za razliku od UDP-a, TCP je protokol orijentisan ka uspostavljanju veze koji zahteva

da se krajnje tačke sporazumeju o učešću. Drugim rečima da bi TCP saobraćaj mogao da

prođe preko interneta, aplikacije na oba kraja veze treba da se sporazumeju oko

uspostave veze. Da bi to učinile, aplikacija na jednom kraju izvršava akciju pasivnog

otvaranja obraćajuči se svom operativnom sistemu i ukazujući da će prihvatiti dolaznu

vezu. Tada operativni sistem dodeljuje broj TCP porta za svoj kraj veze. Aplikacija na

drugom kraju, da bi uspostavila vezu, mora zatim da se obrati svom operativnom sistemu

koristeći zahtev za aktivno otvaranje. Ova dva TCP softverska modula operativnog

sistema zatim komuniciraju da bi uspostavili i proverili vezu. Kada veza bude

uspostavljena , aplikacije treba da započnu prenos podataka.

Slika 12. UDP i TCP iznad IP-a.

3.6.5 Format TCP segmenta

Jedinica prenosa između TCP softvera dva računara naziva se segmentom. Segmenti

se razmenjuju da bi se uspostavile veze, preneli podaci, poslale potvrde prenosa, oglasile

veličine prozora i prekinule veze. Pošto TCP koristi tehniku šlepovanja datagrama,

potvrđivanje koje se šalje sa računara A na računar B može da se prenosi u istom

segmentu kao podaci koji se prenose sa računara A na računar B, iako se potvrđivanje

odnosi na podatke poslate sa računara B na računar A. U praksi se tehnika šlepanja retko

koristi jer većian aplikacija ne šalje podatke u oba smear istovremeno. Na sledećoj slici se

vidi format TCP segmenta. Svaki segment je podeljen na dva dela, zaglavljei podatke koji

dolaze iza njega. Zaglavlje poznato kao TCP zaglavlje,prenosi očekivane identifikacione

podatke i kontrolne informacije.

Koncepcijsko uslojavanje

Aplikacija

Internet (IP)

Mrežni interfejs

TCP UDP

Page 24: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

21

IZVORNI PORT ODREDIŠNI PORT

REDNI BROJ

BROJ POTVRDE

PROZOR

POPUNA

REZERVIS. BITOVI KODA

OPCIJE

PODACI

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

POKAZIVAČ HITNIH PODATAKAKONTROLNI ZBIR

DŽAG

Slika 13. Format TCP segmenta

Polja izvorni port i odredišni port sadrže brojeve TCP portova koji identifikuju

aplikacije na krajevima veze. Polje redni broj identifikuje položaj podatak

asegmentapošiljaoca u toku bajtova. Polje broj potvrde identifikuje broj sledećeg okteta koji

izvor očekuje da primi. Obratite pažnju na to da se redni broj odnosi na tok koji se kreće u

istom smeru kao segment, dok se broj potvrde odnosi na tok koji se kreće u suprotnom smeru

od segmenta.

Polje džag sadrži ceo broj koji sadrži veličinu zaglavlja izraženu u umnošciam od 32

ita. Ono je potrebno zato što se dužin apolja opcije menja u zavisnosti od obuhvaćenih opcija.

Prema tome, veličina TCP zaglavlja menja se u zavisnosti od izabranih opcija. Šestobitno

polje koje je označeno kao rezervisano, rezervisao je za buduću upotrebu. Neki segmenti

prenose samo potvrde prenosa a neki samo podatke.Drugi prenose zahteve za uspostavljanje i

prekidanje veze. TCP softver koristi 6-bitno polje sa oynakom bitovi koda da bi odredio

namenu i sadržaj segmenta. Ovih šest bitova određuju kako treba interpretirati ostala polja u

šaglavlju u skladu sa sledećom tabelom:

Bitovi Značenje ako je bi postavljen na 1

URG Hitni podaci

ACK Potvrda uspešnog prenosa

PSH Prisilan prenos

RST Nasilno prekinuti vezu

SYN Usaglasiti redne brojeve

FYN Kraj toka bitova

Slika 14. Bitovi polja Kod u zaglavlju

Svaki put kada pošalje segment, TCP softver oglašava koliko podataka je spreman da

primi navodeći vličinu svog bafera u polju prozor. Ovo polje sadrži 16.bitni ceo broj bez

Page 25: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

22

predznaka u standardnom mreznom redosledu bajtova. Oglašavanje prozora predstavlja još

jedan primer tehnike šlepovanja, jer oglašavanje prozora prati sve segmente, uključujući i one

koji prenose podatke kao i one koji prenose samo potvrđivanje prenosa.

3.6.6 Podaci van uobičajenog redosleda

Iako je TCP protokol orijentisan na tokove, ponekad je za program na jednom kraju

veze važno da pošalje podatke izvan uobičajenog redosleda, ne čekajući da program na

drugom kraju veze prihvati sve okteet koji se već nalaze u toku. Takvi signali su najčešće

potrebni kada program na udaljenom računaru ne radi pravilno. Ovi signali se moraju

poslati bez čekanja da bi program na drugom kraju veze pročitao sve oktete koji se već

nalaze u TCP toku.

Da bi omogućio slanje signala izvan uobičajenog redosleda, TCP omogućuje

pošiljaocu da označi podatkekako hitne, što znači da prijemni program treba što brže da

bude obavešten o njihovom dolasku, bez obzira na njihovu poziciju u toku podataka.

Kada se otkriju hitni podaci, protokol nalaže da prijemni TCP obavesti sve aplikacije koje

su pridružene vezi da pređu u hitni režim. Naravno, tačni detalji o tome kako TCP

obaveštava aplikaciju o hitnim podacima zavise od operativnog sistema rašuanra.

Mehanizam koji se koristi za označavanje hitnih podataka prilikom njihovog slanja u

segmentu sastoji se od URG bita koda i polja pokazivač hitnih podataka. Kad je URG bit

uključen, pokazivač hitnih podataka određuje poziciju kraja ovih podataka u segmentu.

3.6.7 Opcija maksimalne vličine podataka

Svi segmenti koji se šalju preko neke veze neće biti iste veličine. Međutim, oba kraja

trba da se sporazumeju o maksimalnoj veličini segmenta koji će se prenositi. TCP koristi

polja opcije kako bi pregovarao sa TCP softverom na drugom kraju veze. Jedna od opcija

omogućuje da TCP softver navede maksimalnu veličinu segmenta koju je spreman da

primi. Na primer, ako jedan ugrađeni sistem koji ima samo nekoliko stotina bajtova

prostora u baferu uspostavi vezu sa velikim super razunarom, on može da ugovori MSS

koji ograničava segmente tako da mogu da stanu u bafer. Posebno je važno da računari

koji su povezani lokalnim računarskim mrežama velike brzine izaberu maksimalnu

veličinu paketa tako da rezultujući IP datagrami odgovaraju mrežnoj MTU veličini.

Ukoliko se krajnje tačke ne nalaze u istoj fizičkoj mreži, one mogu da pokušaju da otkriju

minimalnu MTU veličinu duž putanje između njih ili da izaberu maksimalnu veličinu

segmenta od 736 bajta (podrazumevana veličina IP datagrama, 576, umanjena za veličinu

iIP i TCP zaglavlja).

3.6.8 Izračunavanje TCP kontrolnog zbira

Polje kontrolni zbir u TCP zaglavlju sadrži 16-bitni celobrojni kontrolni zbir koji se

koristi za preoveravanje integriteta podatakakao i TCP zaglavlja. Da bi izračunao

kontrolni zbir, TCP softver na računaru pošiljaocu ispred segmenta dodaje pseudo

zaglavlje, dopunjava segment dovoljnim brojem bitova da bi segment bio bio umnožak od

16 bitova i zatim izračunava16-bitni kontrolni zbir nad ukupnim rezultatom. TCP ne

ubraja pseudo zaglavlje ni bitove za popunu u dužinu segmenta i ne prenosi ih. Pored

Page 26: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

23

toga, za potrebe izračunavanja on pretpostavlja da je samo polje kontrolnog zbira jednako

nuli. Kao i kod drugih kontrolnih zbirova, TCP koristi 16-bitnu aritmetiku i uzima

komplement jedinice zbira komplemenatat jedinice. Na prijemnom sajtu, TCP softver

obavlja isto izračunavanje da bi proverio da li je segment stigao čitav. Svrha korišćenja

pseudo zaglavlja je da omogući primaocu da proveri da li je segment stigao na tačno

odredište, što obuhvata IP adresu računara kao i broj porta protokola. Na sledećoj slici se

vidi format pseudo šaglavlja koje se koristi u izračunavanju kontrolnog zbira.

NULA PROTOKOL TCP DUŽINA

ODREDIŠNA ADRESA

IZVORNA ADRESA

Slika 15. Format pseudo zaglavlja

Predajni TCP dodeljuje polju protokol vrednost koju će odgovarajući sistem prenosa

koristiti u svom polju tipa protokola. Za IP datagrame koji prenose TCP, ova vrednost je 6.

Polje TCP DUŽINA određuje ukupnu dužinu TCP segmenta uključujući i TCP zaglavlje. Na

prijemnom kraju, informacije koje se koriste u pseudo zaglavlju izdvajaju se iz datagrama

koji je preneo segment i uključuju u izračunavanje kontrolnog zbira da bi se proverilo da li je

segment stigao čitav na tačno odredište.

3.6.9 Potvrđivanje prenosa i ponovni prenos

Zato što TCP prenosi podatke u segmentima promenljive dužine, kao i zbog toga što

ponovo preneseni segmenti mogu da sadrže više podataka od prvobitnih, potvrde prenosa ne

mogu lako da ukazuju na datagrame i segmente. Umesto toga, oni pokazuju na poziciju u

toku koristeći redne brojeve toka. Primalac prikuplja oktete podataka iz segmenata koji stižu i

ponovo konstruiše tačnu kopiju toka koji se šalje. Pošto se segmenti prenose u IP datagamu,

oni mogu da se izgube ili da budu preneseni van redosleda. Primalac koristi redne brojeve

kako bi ponovouredio segmente. U bilo kom trenutku, primalac će imati nula ili više

rekonstruisanih susednih okteta od početka toka, ali može da ima dodatne delove toka iz

datagrama koji su stigli izvan redosleda. Primalac uvek potvrđuje najduži neprekidni prefiks

toka koji je tačno primljen. Tako pošiljalac prima stalnu povratnu informaciju od primaoca

dok napreduje kroz tok podataka. Šema TCP potvrđivanja naziva se kumulativnom jer

izveštava o tome koliki deo toka je akumuliran. Kumulitivna potvrđivanja prenosa imaju

svoje prenosti i mane. Jedna prednost je to što se ova potvrđivanja lako generišu i

nedvosmislena su. Druga prednost je to što izgubljena potvrđivanja ne moraju obavezno da

nametnu ponovni prenos. Glavni nedostatakje to što pošiljalac ne prima informacije o svim

uspešnim prenosima, nego samo o jednoj poziciji u toku podataka koji je primljen.

Page 27: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

24

3.6.10 Uspostavljanje TCP veze

Da bi uspostavio vezu TCP koristi upoznavanje u tri koraka. Na sledećoj slici je

prikzan najjednostavniji slučaj.

Slika 16. Niz poruka u trosmernom upoznavanju

Prvi segment upoznavanja u tri koraka može da da se identifikuje zato što ima

postavljen bit SYN u polju koda. Druga poruka ima postavljene bitove SYN i ACK, što

pokazuje da ona potvrđuje prenos prvog SYN segmenta i ujedno nastavlja upoznavanje.

Poslednja poruka upoznavanja je samo potvrđivanje prenosa i korisi se samo za obaveštenje

odredišta da se obe stane slažu da je veza uspostavljena. Obično, TCP softver na jednom

računaru pasivno čeka na upoznavanje, a TCP softver na drugom računaruga započinje.

Međutim, upoznavanje je pažljivo projektovano tako da radi čak i ako oba računara

istovremeno pokušaju da započnu vezu. Prema tome veza može da se uspostavi sa bilo kojeg

kraja ili sa oba kraja istovremeno. Kada se veza uspostavi, podaci mogu da protiču

podjednako dobro u oba smera. Ne postoji glavni ili podređeni računar. Upoznavanje u tri

koraka je potrebno i dovoljno za tačnu sinhronizaciju između dva kraja veze.

3.6.11 Početni redni brojevi

Upoznavanje u tri koraka obavlja tri važne funkcije. Ono garantuje da su obe strane

spremne za prenos podataka i omogućuje da se obe strane sporazumeju o početnim rednim

brojevima. Redni brojevi se šalju i njihov prenos se potvrđuje za vreme upoznavnja. Svaki

računar mora nasumice da odabere početni redni broj koji će koristiti za identifikaciju bajtova

u toku podataka koji šalje. Redni brojevi ne mogu uvek da započnu sa istom vrednošću.

Važno je da se obe strane saglase o početnom brojui kako bi se brojevi okteta koji se koriste

u potvrdama prenosa slagali sa onima koji se koriste u segmentima podataka.

Događaji na strani pošiljaoca Mrežne poruke Događaji na strani primaoca

Slanje SYN red.br. = x

Prijem SYN segmenta

Slanje SYN red.br.=y, ACK x+1

Prijem SYN+ACK segmenta

Slanje ACK y+1

Prijem ACK segmenta

Page 28: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

25

3.6.12 Zatvaranje TCP veze

Dva programa koji koriste TCP za komuniciranje mogu propisni da završe

komunikaciju koristeći operaciju zatvaranja. Interno za zatvaranje veze TCP koristi

modifikovano upoznavanje u tri koraka. Setite se da se TCP veze odlikuju punim

dupleksnim prenosom i da ih posmatramo kao da sadrže dva nezavisna toka prenosa, po

jedan u svakom smeru. Kada aplikacija ukaže TCP-u da nema više podataka za slanje,

TCP ćezatvoriti vezu u jednom smeru. Da bi zatvorio svoju polovinu veze, predajni TCP

završava prenos preostalih podataka, čeka da primalac to potvrdi a zatim šalje segment sa

postavljenim bitom FYN. Prijemni TCP potvrđuje prenos FYN segmenta i obaveštava

aplikaciju na svom kraju da nema više podataka na raspolaganju. Kada se veza zatvori u

datom smeru, TCP odbija da prihvati dodatne podatke za taj smer. U međuvremenu

podaci mogu i dalje da protiču u suprotnom smeru dok ga pošiljalac ne zatvori. Naravno

potvrđivanja prenosa nastavljaju da se vraćaju pošiljaocu čak i nakon zatvaranja veze.

Kada oba smera budu zatvorena, TCP softver u svakoj krajnjoj tački briše svoj zapis veze.

Na sledećoj vezi je prikazan postupak zatvaranja veze.

Slika 17. Modifikovano upoznavanje u tri koraka koje se koristi za zatvaranje veze

3.6.13 Nasilno prekidanje veze

U normalnim okolnostima , aplikacija koristi operaciju zatvarnja da bi zatvorila vezu

kada prestane da je koristi. Dakle, zatvaranje veze smatra se normalnim delom upotrebe,

analogno zatvaranju datoteka. Ponekad postoje vanredni uslovi koji preimoravaju

aplikacije da prekinu vezu. Da bi nasilno prekinula vezu jedna strana započinje okončanje

veze slanjem segmenta sa postavljenimbitom RST u polju kod. Druga strana odmah

odgovara na takav segment prekidanjem veze. TCP takođe obaveštava aplikaciju da je

došlo do prekida veze. Nasilan prekid je trenutan prekid koji znači da prenos u oba smera

trenutno prestaje i da se oslobađaju resursi kao što su baferi.

Događaji na strani pošiljaoca Mrežne poruke Događaji na strani primaoca

Aplikacija zatvara vezu

Slanje FIN red. Br. =x Prijem FIN segmenta

Slanje ACK x+1

Prijem ACK

segmenta

Prijem FIN + ack segmenta

Slanje ACK y + 1 Prijem ACK

segmenta

Aplikacija zatvara vezu

Slanje FIN red. Br. =y

Page 29: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

26

3.6.14 Mašina stanja TCP-a

Na sledećoj slici je prestavljena TCP mašina konačnih stanja sa krugovima i

strelicama koje predstavljaju prelaze između njih.

Slika 18. Mašina konačnih stanja TCP-a

3.6.15 Nametanje prenosa podataka

TCP može slobodno da podeli tok podataka na segmente kako bi tok bio prenet, bez

obzira na obim prenosa koji aplikacija itvršava. Glavna prednost dozvoljavanja da TCP

izabere podelu jeste efikasnost. On može da akumulira dovoljno okteta u bafer da bi

napravio razumno velike segmente, smanjujući veliko opterećenje do kojeg dolazi kad

segmenti sadrže samo nekoliko okteta podataka. Da bi se prilagodio interaktivnim

korisnicima tcp obezbeđuje operaciju prisilnog prenosakoju aplikacija može da upotrebi

za nametanje prenosa okteta koji se trenutno nalaze u toku podataka ne čekajući da se

Zatvo

-reno

SYN

poslat

Zatvo

-reno

Sluša

-nje

SYN

prim.

Uspos

-stavl.

FIN

čeka1

FIN

čeka2

Zatvar-

anje Posledn

ji ACK

Ogr.

čekanje

Početak

Page 30: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

27

bafer popuni. Operacija prisilnog prenosa obavlja više od jednostavnog primoravanja

TCP-a da pošalje segment. Ona takođe traži da TCP postavi PSH bit u polje koda

segmenta da bi podaci bili isporučeni aplikaciji na prijemnom kraju. Dakle, prilikom

slanja podtaka sa interaktivnog terminala, aplikacija koristi funkciju prisilnog prenosa

posle svakog pritiska na taster. Slično tome aplikacije posle ispitivanja jednog znaka ili

reda mogu da nametnu njihovo brzo slanje i prikazivanje na terminalu pozivanjem

funkcije prisilnog prenosa.

Page 31: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

28

4 Opis rešenja

Realizovano rešenje pored funkcija vezanih za sam TCP mrežni protokol, sadrži i

funkcije koje odgovaraju referentnom BSD soket API-ju (engl. Berkeley sockets

application programming interface). U narednim poglavljima će detaljno biti opisane

svaka od realizovanih funkcija.

4.1 BSD programska podrška

BSD soket API (engl. Berkeley sockets application programming interface) se sastoji

od biblioteke za razvoj programske podrške u programskom jeziku C, koja obavlja IPC

(engl. Inter-process communication), najčešće za komunikaciu preko računarskih mreža.

BSD predstavlja standardnu apstrakciju za mrežne utičnice. BSD programska podrška

omogućava komunikaciju između dva računara ili između procesa na jednom računaru,

koristeći koncept internet utičnica. Takođe omogućava rad sa mnogim ulazno izlaznim

uređajima i drajverima, iako podrška za njih zavisi od implementacije na operativnom

sistemu. Sprežna implementacija je za TCP implicitno. Programska podrška je prvi put

predstavljena od strane univerziteta Berkli u Kaliforniji za korišćenje na UNIX

operativnim sistemima. Danas, svi moderni operativni sistemi imaju podršku za BSD

spregu, i one je postao standardna sprega za konekciju na internet. Programskoj podršci je

moguće pristupiti na tri različita nivoa. Sasvim nekoliko aplikacija ima potrebu da

pristupa nižim nivoima BSD programske sprege koji su dostupni, tako da se najniži nivo

koristi samo prilikom razvoja internet baziranih tehnologija.Većina novijih operativnih

sistema ima podršku za pristup nižim nivoima, uključujući i windows XP.

4.1.1 BSD soket API funkcije

Sledeća lista predstavlja funkcije i metode podržane od strane BSD soket API-ja:

socket() kreira novi soket i identifikuje ga sa celobrojnom vrednošću.

bind() se obično koristi na strani poslužioca i povezuje utičnicu sa lokalnim portom i

IP adresom računara.

listen() se koristi na strain poslužioca I prebacuje utičnicu u stanje osluškivanja.

connect() koristi se na strani klijenta I prouzrokuje pokušaj da se ostvari TCP

konekcija.

accept() se koristi na strani poslužioca. Funkcija prihvata dolazni pokušaj da se

ostvari TCP konekcija.

send() i recv(), ili write() i read(), ili recvfrom() i sendto(), se koriste za

slanje i primanje podataka .

close() se koristi za oslobađanje resursa alociranjih uz utičnicu. U slučaju TCP-a

konekcija se prekida.

Page 32: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

29

gethostbyname() i gethostbyaddr() se koriste za otkrivanje imena i adrese

računara.

select() se koristi da uprosti dostupnu listu utičnica samo na one koji su spremni za

pisanje, čitanje ili imaju grešaka.

poll() se koristi za proveru stanja utičnice. Utičnica se može testirati da bi se videlo

da li je spremna za pisanje čitanje ili ima grešaka.

getsockopt() se koristi za iščitavanje tekućih vrednosti utičnice.

setsockopt() se koristi za postavljanje pojedinačnih opcija utičnice.

Realizovani BSD soket API ne sadrži sve funkcije kao referentni. Od prethodno

navedenih realizovane su sledeće:

void SocketLayerInit(void)

Opis:

Funkcija inicijalizuje utičnice čiji broj je ograničen vrednošću osam.

#define MAX_SOCKET 8

Utičnice imaju oblik strukture sa sledećim poljima:

struct MCSocket{

int SocketType;

AckListPkt *pTCPListHead;

AckListPkt *pTCPListTail;

TCP_STATE smState;

DWORD remoteIP;

WORD remotePort;

DWORD localIP;

WORD localPort;

int AckListCount;

int SocketID;

DWORD TcpSEQ;

DWORD TcpACK;

BYTE RetryCount;

DWORD TCPACKNum;

int TCPAppClosed;

int dataOffset;

WORD window;

};

Polja strukture:

SocketType – tip utičnice, na početku inicijalizovan na na vrednost:

#define TCP_SOCK_DGRAM 110

pTCPListHead – adresa početka reda za retransmisiju

pTCPListtail – adresa kraja reda za retransmisiju

smState – stanje utičnice, na početku inicijalizovano na stanje

TCP_CLOSED

remoteIP – adresa udaljenog računara

remotePort – port udaljenog računara

Page 33: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

30

localIP – lokalna IP adresa

localPort – lokalni port

AckListCount – broj paketa u redu za retransmisiju

SocketID – identifikator utičnice

TcpSeq – tekući redni broj paketa

TcpAck – tekući broj potvrde

RetryCount – broj pokušaja retransmisije

TCP_SOCKET tcp_socket( int af, int type, int protocol )

Opis:

Funkcija kreira utičnicu i vraća identifikator iste. Suštinski, u funciji se

pronalazi slobodna utičnica, odnosno ona koja je u stanju zatvorena

(SKT_CLOSED). U slučaju ispravnih parametara vraća se identifikator

utičnice, a u slučaju greške povratna vrednost je (-1). Pre nego li se kao

povratna vrednost postavi identifikator utičnice, potrebno je utičnicu prevesti u

stanje kreirana (SKT_CREATED):

socket->smState = SKT_CREATED;

Parametri:

af – specificira familiju adresa.U realizovanoj implementaciji vrednost koja

se očekuje je dva. Vrednost dva simboliše IPv4 familiju adresa. Ova vrednost

je definisana imenskom konstantom:

#define AF_INET 2

type - specificira tip utičnice. Realizovano rešenje očekuje vrednost 100, koja

definiše sekvencijalni, pouzdani, pun dupleks, konekcijski orijentisani tok

podataka koji poseduje mehanizam slanja van normalnog redosleda (engl.

OOB Out of Band). Odgovarajuća imenska konstanta je :

#define TCP_SOCK_STREAM 100

protocol – specificira tip protokola. U našem slučaju koristi se TCP koji

prema preporuci ima vrednost 6. Odgovarajuća imenska konstanta je:

#define TCP_IPPROTO_TCP 6

Poziv funkcije:

connectSocket = tcp_socket( TCP_AF_INET, TCP_SOCK_STREAM, TCP_IPPROTO_TCP );

int tcp_bind( TCP_SOCKET s, DWORD IpAddr, WORD port )

Page 34: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

31

Opis:

Funkcija povezuje prethodno kreiranu utičnicu sa navedenim portom i IP

adresom. U slučaju da prosleđeni identifikator identifikuje utičnicu koja nije

kreirana povratna vrednost je (-1). U slučaju da je navedena vrednost porta

nula, generiše se automatska vrednost koja je u opsegu od 1024 do 5000. Posle

poziva funkcije utičnica je u stanju SKT_BOUND.

Parametri:

s – identifikator utičnice, identifikuje utičnicu koja je kreirana

IpAddr – lokalna adresa računara

port – lokalni port računara

Poziv:

iResult = tcp_bind(connectSocket,0xF001A8C0,27015);

int tcp_listen( TCP_SOCKET s )

Opis:

Funkcija prevodi utičnicu u stanje osluškivanja na zahtev za vezu. U slučaju

da prosleđeni identifikator utičnice identifikuje utičnicu koja nije u stanju

SKT_BOUND vraća se poruka o greški i vrednost (-1). Ako je prevođenje u

stanje SKT_LISTEN uspešno povratna vrednost je nula.

Parametri:

s – identifikator utičnice, identifikuje utičnicu koja je kreirana

Poziv:

iResult = tcp_listen(connectSocket);

TCP_SOCKET tcp_accept( TCP_SOCKET s)

Opis:

Funkcija prihvata dolazni poziv za vezu. U pitanju je blokirajući poziv. U

slučaju uspešno uspostavljene veze povratna vrednost je jednaka identifikatoru

utičnice preko koje je veza ostvarena. Ukoliko se desi greška, povratna

vrednost funkcije je (-1). Posle uspešnog poziva utičnica je u stanju

TCP_EST.

Parametri:

Page 35: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

32

s – identifikator utičnice, identifikuje utičnicu koja je kreirana

Poziv:

acceptSocket = tcp_accept(connectSocket);

int tcp_connect(TCP_SOCKET s, DWORD remoteIpAddr, WORD port )

Opis:

Funkcija pokušava da uspostavi konekciju na specificiranoj utičnici. Na

osnovi IP adrese i porta, šalje se paket koji sadrži samo zaglavlje. U datom

paketu postavljen je bit SYN. Ova vrednost označava da je u pitanju paket koji

predstavlja zahtev za ostvarenje veze. Broj paketa je postavljen na inicijalnu

vrednost ISS (eng. Initial Send Sequence Number). Posle uspešnog slanja

postavlja se stanje utičnice na TCP_SYN_SENT. Pored toga povratna

vrednost funkcije je SOCKET_CNXN_IN_PROGRESS i predstavlja

obaveštenje da je proces uspostavljanja veze u toku. Imenske konstante od

značaja su:

#define SOCKET_CNXN_IN_PROGRESS -6

#define SYN 0x02

Parametri:

remoteIpAddr – adresa udaljenog računara sa kojim želi da se uspostavi veza

port – port udaljenog računara na kome se očekuje zahtev

int tcp_send( TCP_SOCKET s, BYTE* buf, int len)

Opis:

Funkcija šalje podatke preko konektovane utičnice. Ukoliko nema grešaka

funkcija vraća broj poslatih bajta. Ukoliko je veličina bafera za slanje veća od

1460 bajta (ovaj broj je dobijen tako što je od MTU vrednosti umanjena

veličina zaglavlja za TCP i IP nivo od po 20 bajta ) potrebno je segmentirati

bafer. Ovakvi paketi se šalju sa postavljenim bitom PUSH. Svaki sledeći broj

paketa je veći od prethodnog za njegovu veličinu. Imenska konstanta za PUSH

je:

#define PSH 0x08

Parametri:

s – identifikator utičnice, identifikuje utičnicu koja je kreirana

buf – adresa početka podataka namenjenih za slanje

len - broj bajtova koji se šalju (veličina bafera)

Page 36: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

33

Poziv funkcije:

sentBytes = tcp_send(connectSocket, gpucImage, 1000);

int tcp_recv( TCP_SOCKET s, char * buf, int len, int flags )

Opis:

Funkcija prima podatke preko konektovane utičnice. Ukoliko nema grešaka

funkcija vraća broj primljenih bajtova. U slučaju greške povratna vrednost je

-1. Ako je veličina bafera za prijem veća od 1460, funkcija će čekati dok se u

prijemnom baferu ne akumulira dovoljno podataka.

Parametri:

s – identifikator utičnice, identifikuje utičnicu koja je kreirana

buf – adresa početka podataka namenjenih za slanje

len - broj bajtova koji se šalju (veličina bafera)

Poziv finkcije:

bytesRecved = tcp_recv(connectSocket,gpucImage,15000,0)

4.2 Prijemna strana

Posmatrajući TCP mrežni protokol, njegovu ulaznu tačku predstavlja IP sloj, odnosno

funkcija koja prima podatke na IP nivou i koja ih na osnovu polja protocol u zaglavlju IP

paketa dalje usmerava. Zadatak funkcije koja prima podatke na IP nivou je da pored

usmeravanja odgovarajućem protokolu na višem protokol stek nivou i proveri kontrolnu

sumu primljenog paketa. Pogrešna kontrolna suma uzrokuje odbacivanje datog paketa.

Realizacija u našem slučaju izgleda ovako:

switch (pIpPkt->ipHdr.protocol) {

case IP_PROT_UDP:

return (NetUdpRcv(pIpPkt, ntohs(pIpPkt->ipHdr.length) -

IP_HEADER_LEN));

case IP_PROT_ICMP:

return (NetIcmpRcv(pIpPkt, ntohs(pIpPkt->ipHdr.length) -

IP_HEADER_LEN));

case IP_PROT_TCP:

Page 37: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

34

return (NetTcpRcv(pIpPkt,ntohs(pIpPkt->ipHdr.length) -

IP_HEADER_LEN));!

default:

return 0; // nepodržan protokol

}

U slučaju da je funkcija prijema na IP nivou prepoynala da se radi o TCP mrežnom

protokolu, poziva se funkcija NetTcpRcv kojoj se prosleđuje adresa paketa i veličina paketa

oduzeta za vrednost veličine zaglavlja IP paketa (20 bajta). Deklaracija NetTcpRcv funkcije

je :

void TCP_RxHandler( NetTCPPkt *RxPkt,unsigned short usLen )

Prvi parametar funkcije je tipa NetTCPPkt. Definicija tipa je sledeća struktura:

typedef struct {

NetIpHdr ipHdr;

NetTcpHdr tcpHdr;

unsigned char data[1];

} NetTCPPkt;

Struktura sadrži polja koja predstavljaju IP zaglavlje (NetIpHdr), TCP zaglavlje

(NetTcpHdr) i adresu odakle počinju podaci u paketu. TCP zaglavlje je sledećeg oblika:

typedef struct _TCP_HEADER{

WORD SourcePort;

WORD DestPort;

DWORD SeqNum;

DWORD AckNum;

BYTE HdrLen;

BYTE Flags;

WORD Window;

WORD Checksum;

WORD UrgentPointer;

} NetTcpHdr;

Pored paketa funkciji NetTcpRcv se prosleđuje veličina pakata, koja je jednaka zbiru

veličine TCP zaglavlja i veličini podataka. Najpre se provera kontrolni zbir, i ukoliko je došlo

do greške paket se odbacuje. Za ove potrebe je realizovana funkcija:

WORD CalcTcpChecksum( DWORD SrcIP,DWORD DestIP, BYTE* PktBfr, WORD BfrLen )

Ukoliko je povratna vrednost funkcije jednaka 0xFFFF paket je prihvaćen bez

grešaka. Zatim se podaci parsiraju i na osnovu IP adrese i izvorišnih i odredišnih portova se

pronalazi odgovarajuća utičnica. Za ove potrebe je realizovana funkcija:

TCP_SOCKET FindTargetSocket(int SockType,DWORD SrcIP,DWORD DestIP,WORD

DestPort )

Na osnovu prosleđenih parametara funkcija pronalazi utičnicu i kao povratnu vrednost

vraća identifikator iste.

Page 38: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

35

Sa pronađenom utičnicom i veličinom paket se prosleđuje funkciji koja realizuje i u

potpunosti odgovara TCP mašini stanja. Realizovana funkcija ima sledeću deklaraciju:

void HandleTCPSegment( TCP_SOCKET s, NetTCPPkt* pNetPkt, WORD len )

Funkcija na osnovu stanja utičnice pokreće odgovarajuće akcije. Moguća stanja su

definisana sledećom enumeracijom:

typedef enum _TCP_STATE{

SKT_CLOSED,

SKT_CREATED,

SKT_BOUND,

TCP_LISTEN,

TCP_SYN_RCVD,

TCP_SYN_SENT,

TCP_EST,

TCP_CLOSE_WAIT,

TCP_LAST_ACK,

TCP_FIN_WAIT_1,

TCP_RESET_RCVD,

TCP_CLOSE,

TCP_INVALID

} TCP_STATE;

Stanje SKT_CLOSED je inicijalno stanje utičnice. Posle poziva funkcije za kreiranje

utičnice prelazi se u stanje SKT_CREATED. Posle poziva funkcije tcp_bind() utičnica je u

stanju SKT_BOUND. U stanju TCP_LISTEN očekuje se zahtev za vezom. Ukoliko zahtev

stigne poziva se funkcija za procesiranje zahteva:

case TCP_LISTEN:

if ( pTCP->Flags & SYN ){

ProcessSYN( pSocket, pNetPkt );

}

U funkciji ProcessSYN se šalje ogovor u vidu postavljenih bitova SYN I ACK.

Takođe se setuje broj paketa n ainicijalnu vrednost dok se broj potvrde dobija tako što se broj

paketa iz primljenog paketa uveća za jedan.

U stanje SYN_RCVD se prelazi posle slanja odgovora na primljeni paket za ostvarenje

veze. Ukoliko se dok je utičnica u ovom stanju primi paket potvrde, to znači da je ostvaren

princip rukovanja (engl. handshaking) odnosno da je ostvarena veza. Posle toga prelazi se u

stanje ostvarenosti veze (TCP_EST) u kome je omugućena razmena paketa sa podacima. Na

svaki paket koji sadrži podatke, se po uspešnom prijemu u prijemnom baferu šalje paket

potvrde. Ukoliko se u stanju TCP_EST primi paket koji sadrži setovan bit FIN to je signal da

pošiljalac nema na raspolaganju više podataka za slanje i da se veza može sporazumno

prekinuti. Sve što ostaje je da se pošalje paket potvrde i da se oslobode resursi.

Prethodno opisane funkcije su pozadinske, što znači da krajnji korisnik nema

mogućnost manipulacije istim. Jedina funkcija koja korisniku omogućava prihvat dolazećih

podataka je prethodno opisana tcp_recv() iz BSD soket API-ja.

Page 39: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

36

4.3 Slanje podataka

Gledano sa strane protokola, slanje podataka može biti inicirano od strane korisnika

kao i od strane pozadinskih procesa. Korisnik može da inicira prenos preko funkcije

tcp_send(). Iza tog poziva se krije poziv funkcije:

int TransmitTcpPkt(DWORD remoteIP, WORD localPort, WORD remotePort, DWORD tseq, DWORD tack, BYTE flags, NetTCPPkt *sbfr, WORD DataLen, struct MCSocket* pSock )

Parametri:

remoteIP – adresa odredišnog računara

localPort – port sa kog se šalju podaci na izvorišnom računaru

remotePort – port na kom odredišni računar osluškuje

tseq – broj paketa

tack – broj potvrde

flags – definiše kog je tipa paket. Moguće vrednosti ovog parametra su:

#define FIN 0x01 - kraj slanja #define SYN 0x02 - usaglašavanje rednih brojeva

#define RST 0x04 - nasilan prekid veze

#define PSH 0x08 - prisilan prenos

#define ACK 0x10 - polje potvrde uspešnog prijema

#define URG 0x20 - slanje hitnih podataka

sbfr – adresa paketa koji se šalje

DataLen – veličina podataka u bajtovima

pSock – adresa utičnice

Unutar funkcije se najpre vrši popunjavanja polja TCP i IP zaglavlja. Ukoliko je paket

koji se šalje sinhronizacioni, iza TCP zaglavlja se lepe opcije. Opcije sadrže maksimalnu

veličinu segmenta koja u našem slučaju iznosi 1460 bajta. Dužina polja opcije je četiri.

Relizacija je sledeća:

if( flags & SYN ){

options.Kind = TCP_OPTIONS_MAX_SEG_SIZE;

options.Length = 0x04;

options.MaxSegSize = htons(0x05b4);

memcpy( sbfr->data , (BYTE*)&options, sizeof(options));

hLen += sizeof(options);

}

Page 40: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

37

Na kraju je potrebno na ukupnu dužinu dodati i dužinu opcija. Ukoliko paket sadrži

podatke za slanje potrebno ga je uvezati u red za retransmisiju. Ovo je potrebno da ukoliko se

paket izgubi izvrši njegova retransmisija. Za dodavanje paketa u red za retransmisiju je

realizovana funkcija:

void TCPAdd2AckList( struct MCSocket* pSock, AckListPkt pktPtr,WORD tcpPktLen )

Navedena funkcija dodaje paket na kraj reda i ažurira polje o broju nepotvrdjenih

paketa u redu za retransmisiju. Broj paketa u redu za retransmisiju je ograničen imenskom

konstantom:

#define MAX_TCP_TX_PKT_BFR 8

Ova konstanta u stvari predstavlja veličinu kliznog prozora. Naime, osam paketa će se

slati bez čekanja na potvrdu. Kako potvrde paketa pristižu tako se paketi koji su potvrđeni

briši iz reda za retransmisju. Funkcija koja ovo omogućuje je:

int DeQueAckList( struct MCSocket* pSock, int i)

Posle uvezivanja paketa u red za retransmisiju, paket se prosleđuje IP nivou tj.

funkciji:

int NetIpSnd(NetIpPkt *pIpPkt, unsigned short usLen)

CD kontroler je odgovoran za prihvatanje neobrađene binarne slike/videa sa senzora

(CMOS ili CCD) i prihvatanje YUV video podataka u raznim formatima koji obično dolaze

sa video dekoderskih uređaja. U slučaju binarne slike potrebno je sliku obraditi i

Page 41: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

38

transformisati u potreban oblik. Ova obrada se može izvrišiti u modulu za obradu ili

programski. U paraleli sa obradom CCD kontroler može da izračunava statistiku slike (H3A i

histogram) za eventualnu kontrolu podešavanja parametara slike.

Bitne stvari koje CCD kontroler podržava su: ulazni bajer format, generisanje HD/VD

signala za sinhronizaciju, podržavanje senzora sa izvorom progresiv slika ili polu-slika,

senzore sa takatom do 90MHz, ulazni YCbCr 4:2:2 format bilo 8 ili 10 bita dužine.

IPIPE modul je odgovoran za transformaciju binarnih podataka sa senzora u format

YCbCr 4:2:2 koji je pogodan za kompresiju ili prikazivanje na ekran. Programiranje se vrši

preko kontrolnih i konfiguracionih registara. Podržane opcije su: primanje ulaznog signala u

standardnom bajer formatu, prihvatanje slike bilo sa CCD/CMOS senzora ili iz

SDRAM/DDRAM memorije, izlaz slike do 1280 tačaka širine, primene horizontalnog

median filtera, programibilnog filtera šuma, digitalno pojačanje boja i balans belog, gama

korekciju, programibilnu konverziju boja (RGB u YUV)…

CMOS senzor blok se sastoji od s-funkcije (u datoteci CMOScapture.c), pripadajuće tlc

skripte (CMOScapture.tlc) i modela sa maskom parametre(CMOScaptureBlock.mdl).

4.3.1 S-funkcija bloka

U datoteci CMOScapture.c se nalazi s-funkcija CMOScapture. Ona se sastoji od

sledećih metoda:

mdlCheckParameters(SimStruct *S) metoda za proveru parametara

mdlInitializeSizes(SimStruct *S) metoda sadrži definiciju za broj ulaza i izlaza.

if (!ssSetNumInputPorts(S, 0)) return;

if (!ssSetNumOutputPorts(S, 1)) return;

I definiciju parametara ulaza i izlaza. U ovom slučaju su veličine dinamičke jer

veličina slike zavisi od predhodnog bloka.

ssSetOutputPortDataType(S, 0, SS_UINT8);

ssSetOutputPortMatrixDimensions(S,0,DYNAMICALLY_SIZED,

DYNAMICALLY_SIZED)

ssSetOutputPortComplexSignal(S, 0, COMPLEX_NO);

ssSetOutputPortOptimOpts(S, 0, SS_REUSABLE_AND_LOCAL);

ssSetOutputPortOutputExprInRTW(S, 0, 0);

• mdlInitializeSampleTimes(SimStruct *S) metoda definiše vreme koraka simulacije što

u ovom slučaju nije od značaja.

• mdlSetWorkWidths(SimStruct *S) metoda sadrži registraciju parametara.

Naredne tri metode služe za postavljanje dimenzije i tipa izlaznog signala:

• mdlSetOutputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetDefaultPortDimensionInfo(SimStruct *S)

Page 42: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

39

• mdlSetDefaultPortDataTypes(SimStruct *S)

• mdlOutputs(SimStruct *S, int_T tid) metoda mora da postoji a u ovom slučaju nije od

značaja.

4.3.2 Simulink blok

Simulink blok (Slika 18) ima jedan izlaz čije su dimenzije 2 puta rezolucija zadate

slike i koji predstavlja izlaz iz IPIPE modula procesora.

Slika 18 – Izgled CMOS senzor bloka

Maska bloka predstavlja grafičku spregu za unos parametara(Slika 19). U ovom

slučaju ima 32 parametara koja se mogu podešavati. Dva glavna parametra su visina i širina,

odnosno rezolucija slike za koju postoje i više predefinisanih vrednosti. Ostali parametri su

grupisanu u tri grupe: podešavanje senzora (sensor settings), podešavanje pojačanja (gain

settings) i podešavanje pregleda (previewer settings) .

• Podešavanje senzora se obavlja podešavanjem sledećih parametara: veličine polja,

pomeraja početka po horizontali i vertikali, osvetljenje, i četiri registara za modove

očitavanja (column address, row address, read mode 1, read mode 2).

• Podešavanje pojačanja može da bude analogno i digitalno i obavlja se za svaku boju u

bajerovom formatu posebno.

• Podešavanje pregleda uključuje podešavanje kontrasta i osvetljenja.

Page 43: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

40

Slika 19 – Parametri CMOS senzor bloka

4.3.3 TLC skripta

Datoteka CMOScapture.tlc predstavlja TLC skriptu koja uz pomoć funkcija koje su

definisane u TLC skripti modela, generiše CCS projekat i odgovarajuće datoteke.

Kodovanje se obavlja uz pomoć date programske podrške odnosno strukture za svaki

modul koji se koristi. Za CMOS senzor blok je koriščen CCD kontroler i IPIPE modul.

Data je struktura kojom se definišu parametri za CCD kontroler. Komande TLC skripte

počinju znakom %. Za preuzimanje parametara i drugih parametara samog bloka koriste se

bibliotečke funkcije kao na primer %<LibBlockParameterValue(height, 0)> kojom se na

dato mesto postavlja vrednost visine.

%assign HEIGHT = LibBlockParameterValue(height, 0)

%assign WIDTH = LibBlockParameterValue(width, 0)

// CCDC configuration parameters

PSP_VPFECcdcConfigParams ccdcParams =

{

FVID_CCDC_RAW_FORMAT, /* dataFlow */

FVID_FIELD_MODE, /* ffMode */

Page 44: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

41

%<HEIGHT> , /* height */

%<WIDTH>, /* width */

(%<WIDTH> *2), /* pitch */

0, /* horzStartPix */

0, /* vertStartPix */

NULL, /* appCallback */

{

MT9P031_Open, /* extVD Fxn */

MT9P031_Close,

MT9P031_Control,

},

0, /*segId */

{

PSP_VPFE_BITS12, /* dataSize */

PSP_VPFE_PACK8_16BITS_PIXEL, /* pack8 */

PSP_VPFE_DataPol_Normal, /* dataPol */

PSP_VPFE_SyncPol_Positive, /* VDSyncPol */

PSP_VPFE_SyncPol_Positive, /* HDSyncPol */

PSP_VPFE_SyncDir_Input, /* HDVDMaster */

50, /* HDSyncWidth */

4, /* VDSyncWidth */

800, /* numPxlPerLine*/

1000, /* numLinPerFld */

PSP_VPFE_ALaw_Disable, /* ALawEnable */

PSP_VPFE_ALaw_bits15_6, /* ALaw_Width */

}

};

U parametrima za CCD kontroler nalaze se i funkcije MT0P9031_Open,

MT0P9031_Close, MT0P9031_Control koje služe za inicijalizaciju, deinicijalizaciju i

kontrolu senzora. Ove funkcije su sadržane u datotekama MT9P031_extImageSensor.c i

MT9P031_extImageSensor.h koje su uključene u projekat.

U narednom kodu se nalazi struktura za podešavanje parametara senzora. Svi parametri se

preuzimaju iz bloka odgovarajućim funkcijama

// MT0P031 configuration parameters

MT9P031_FormatParams MT9P031Params={

0x8000, //pixel clock control

48,// M

5,// N

4,// P1

%<LibBlockParameterValue(rOff, 0)> ,//row start

%<LibBlockParameterValue(rSize, 0)>,//row size

%<LibBlockParameterValue(rOff, 0)> ,//col start

%<LibBlockParameterValue(cSize, 0)>,//col size

%assign mode = LibBlockParameterValue(test, 0)

%switch (mode)

%case 1

0,

Page 45: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

42

%break

%default

%<mode> * 8 +1,

%break

%endswitch

%<LibBlockParameterValue(rm1, 0)>,//read mode 1

%<LibBlockParameterValue(rm2, 0)>, //read mode 2

%<LibBlockParameterValue(hBlank, 0)>,//horizontal blank

%<LibBlockParameterValue(vBlank, 0)>,//vertikal blank

%<LibBlockParameterValue(shuter, 0)>,//shutter width

%<LibBlockParameterValue(radd, 0)>,//row adrress mode

%<LibBlockParameterValue(radd, 0)>,//col address mode

0,//test green pattern

0,//test red pattern

0//test blue pattern

};

Parametri za podešavanje IPIPE modula se nalaze u datoteci previewer.c. Tu se nalaze

parametri slike kao i grupe koeficijenata za balans belog, RGB u RGB (eng. RGB blending),

CFA (eng. Color Filtar Array) i RGB u YUV.

Same komande za kreiranje logičkog kanal i podešavanje slike se prosleđuju preko FVID

funkcija na sledeći način.

Prvo kreiranje IPIPE logičkog kanala i prosleđivanje parametara:

PrevHandle = FVID_create("/previewer", IOM_INOUT, NULL, &prevChannel,NULL);

FVID_control(PrevHandle,PSP_PREVIEWER_IOCTL_SET_PARAMS, &PrevConfigParams)

Kreiranje logičkog kanala CCD kontrolera i prosleđivanje parametara:

ccdcHandle = FVID_create("/VPFE0",IOM_INOUT, NULL, &vpfeParams,&gioAttrs);

FVID_control(ccdcHandle,VPFE_ExtVD_BASE+PSP_VPSS_EXT_VIDEO_DECODER_CONFIG,&

MT9P031Params);

Organizacija prijema slike je takva da postoji ulazni kružni bafer sa minimalno 3 polja

za sliku. CCD kontroler smešta dolazne slike u bafer brzinom kojom pristižu dok se pri

obradi uzima najstarija slika iz bafera čime su obrada i prijem slike vremenski nezavisni.

Dodavanje alocirane memoriju u red bafera se vrši komandom

FVID_queue(ccdcHandle, ccdcFrm[i]);

Preuzimanje bafera sa slikom se vrši sa

FVID_dequeue(ccdcHandle, &capFrm);

Dok se automatski dodavanje praznog i preuzimanje punog bafer obavlja sa

FVID_exchange(ccdcHandle, &capFrm);

U generisanom kodu u procesnoj petlji je smešten naredni deo koda koji samo prvi

put preuzme pun bafer a svaki sledeće zameni prazan sa punim. Koji zatim dodeljuje

Page 46: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

43

pokazivač na podatke slike promenljivoj sa nazivom izlaznog signala tako da bi sledeći blok

u nizu mogao da preuzme taj podatak.

if (firstFrame) { /* Transfer ownership of one frame from driver to application */

FVID_dequeue(ccdcHandle, &capFrm);

firstFrame = FALSE;

}

else {

FVID_exchange(ccdcHandle, &capFrm);

}

%assign outSignalName = FEVAL("getSignalName",

LibBlockOutputSignal(0, "", "", 0))

%<outSignalName> = (uint8_T *) capFrm->frame.frameBufferPtr;

4.4 Skaler slike (Resizer)

Skaler slike je deo VPFE modula koji je fizička implementacija polifaznog filtera za

operaciju skaliranja. Skaler slike može da operiše na YCbCr 4:2:2 formatu slike ili formatu sa

odvojenim poljem boja na primer RGB 8:8:8. Skaler koristi sledeće algoritme za skaliranje:

• Bi-linearnu interpolaciju

• Bi-kubik interpolaciju

• Nikvistov niskopojasni filtar

Za povećanje slike može da se koristi bilo koji od ova tri metoda, a za smanjenje se

prvo koristi niskopojasni filtar da bi se izbegao aliasing efekat. Od 1/4X do X, skaler koristi

četvorofazni polifazni filtar, a za X do 4X skaliranje koristi osmofazni polifazni filtar. Izbor

filtra se vrši automatski na bazi faktora skaliranja Skaler radi u 2 etape, horizontalnoj i

vertikalnoj. Ulaz može da bude sa CCD kontrolera ili iz memorije.

4.4.1 S-funkcija bloka

U datoteci resizer.c je definisana s-funkcija sa imenom „resizer“. Ona se sastoji od

sledećih metoda:

• mdlCheckParameters(SimStruct *S)

• mdlInitializeSizes(SimStruct *S)

• mdlInitializeSampleTimes(SimStruct *S)

• mdlSetWorkWidths(SimStruct *S)

• mdlSetInputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

Page 47: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

44

• mdlSetOutputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetDefaultPortDimensionInfo(SimStruct *S)

• mdlSetInputPortDataType(SimStruct *S, int port, DTypeId dataType)

• mdlSetOutputPortDataType(SimStruct *S, int port, DTypeId dataType)

• mdlSetDefaultPortDataTypes(SimStruct *S)

• mdlOutputs(SimStruct *S, int_T tid)

4.4.2 Simulink model

Model skalera slike (Slika 20) može da se koristi u sprezi sa bilo kojim izvorom slike

u odgovarajućem formatu. Preko ulazne sprege preuzima rezoluciju ulazne slike a u

parametrima se postavlja rezolucija izlazne slike.

Slika 20 – Izgled bloka za skaliranje slike

Pored rezolucije u parametrima skalera slike (Slika 21) može da se postavi i deo slike

koji će biti skaliran, kao i načini skaliranja.

Page 48: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

45

Slika 21 – Parametri bloka za skaliranje slike

4.4.3 TLC skripta

Struktura za podešavanje parametara skalera slike sve vrednosti preuzima iz

odgovarajućeg bloka:

/* Params structure for configuration of parameters for channel 1 */ PSP_RSZparams params =

{

%<LibBlockInputSignalDimensions(0)[0]> /2, /* Input image width */

%<LibBlockInputSignalDimensions(0)[1]>, /* Input image height */

%<LibBlockInputSignalDimensions(0)[0]>, /* Input image pitch */

%switch(LibBlockParameterValue(imgType, 0))

%case 1

PSP_RSZ_INTYPE_YCBCR422_16BIT, /* Input image type */

%break

%case 2

PSP_RSZ_INTYPE_PLANAR_8BIT, /* Input image type */

Page 49: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

46

%break

%endswitch

%<LibBlockParameterValue(vPix, 0)>, /* Vertical starting pixel */

%<LibBlockParameterValue(hPix, 0)>, /* Horizonatl starting pixel */

%if (LibBlockParameterValue(LumaProc, 0) == 1)

PSP_RSZ_CBILIN_DISABLE, /* Chroma position */

%else

PSP_RSZ_CBILIN_ENABLE, /* Chroma position */

%endif

%switch(LibBlockParameterValue(pixFormat, 0))

%case 1

PSP_RSZ_PIX_FMT_UYVY, /* Image format */

%break

%case 2

PSP_RSZ_PIX_FMT_YUYV, /* Image format */

%break

%case 3

PSP_RSZ_PIX_FMT_PLANAR, /* Image format */

%break

%endswitch

%<LibBlockParameterValue(ow, 0)>, /* Intermediate image width */

%<LibBlockParameterValue(oh, 0)>, /* Intermediate image height */

%<LibBlockParameterValue(oPitch, 0)>,/* Intermediate image pitch */

%<LibBlockParameterValue(hStart, 0)>, /* Horizontal starting phase */

%<LibBlockParameterValue(vStart, 0)>, /* Vertical starting phase */

gRDRV_reszFilter4TapHighQuality, /* Horizontal filter coefficients */

gRDRV_reszFilter4TapHighQuality, /* Vertical filter coefficients */

%switch(LibBlockParameterValue(lumEnchance, 0))

%case 1

PSP_RSZ_YENH_DISABLE /* Luma enhancement options */

%break

%case 2

PSP_RSZ_YENH_3TAP_HPF /* Luma enhancement options */

%break

%case 3

PSP_RSZ_YENH_5TAP_HPF /* Luma enhancement options */

%break

%endswitch

};

U inicijalizaciji se kreira logički kanal i prosleđuju se parametri:

Page 50: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

47

rszfd =FVID_create("/resizer", IOM_INOUT, NULL,(void *)&memSegId

,&gioAttrs);

FVID_control(rszfd, PSP_RSZ_IOCTL_SET_PARAMS, &params);

Za skaliranje je još potrebno ukazati na ulazni i izlazni bafer i veličinu bafera a zatim izvršiti

samo skaliranje. I naravno proslediti pokazivač na sliku narednom bloku:

resize.inBufSize=%<LibBlockInputSignalDimensions(0)[0]> *

<LibBlockInputSignalDimensions(0)[1]>*2;

resize.outBufSize =%<LibBlockParameterValue(oPitch, 0)> *

%<LibBlockParameterValue(oh, 0)>*2;

resize.inBuf = %<inSignalName>;

resize.outBuf = prevBuff->frame.frameBufferPtr;

FVID_control(rszfd, PSP_RSZ_IOCTL_RESIZE, &resize) )

%assign outSignalName=

FEVAL("getSignalName",LibBlockOutputSignal(0,"","",0))

%<outSignalName> = prevBuff->frame.frameBufferPtr;

4.5 H3A blok

H3A modul je dizajniran za podršku kontrolne petlje za automatski fokus AF (eng Auto

focus), automatski balans belog AWB (eng Automatic White Balance) i automatskog

osvetljenja AE (eng. Auto Exposure) računanjem statistike slike ili videa. Statistika slike se

koristi za podešavanje raznih parametara u procesu obrade slike.

Postoje dva glavna bloka u H3A modulu:

• Auto fokus (AF)

• Automatsko osvetljenje (AE) i automatski balans belog (AWB)

AF izvodi i filteriše podatke za crvenu zelenu i plavu boju i dobavlja bilo

nagomilavanja ili maksimume vrednosti u specificiranom regionu. Specificirani region je

dvodimenzionalni blok podataka koji predstavlja prozor nad kojim se vrši obrada. AF

podržava veći broj prozora, čija je veličina ista i može da se podesi.

AE/AWB akumulira i proverava zasićenje vrednosti u određenom regionu slike. Broj

prozora/regiona je takođe podesiv kao i visina i širina.

Page 51: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

48

4.5.1 S-funkcija bloka

U datoteci h3a.c je definisana s-funkcija h3a. Ona se sastoji od sledećih metoda:

• mdlCheckParameters(SimStruct *S)

• mdlInitializeSizes(SimStruct *S)

• mdlInitializeSampleTimes(SimStruct *S)

• mdlSetWorkWidths(SimStruct *S)

• mdlSetInputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetOutputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetDefaultPortDimensionInfo(SimStruct *S)

• mdlSetInputPortDataType(SimStruct *S, int port, DTypeId dataType)

• mdlSetDefaultPortDataTypes(SimStruct *S)

• mdlOutputs(SimStruct *S, int_T tid)

4.5.2 Model bloka

H3A blok (Slika 22) se povezuje na izlaz CMOS senzor bloka. Izlaz H3A bloka je vektor

podataka čija veličina zavisi od broja prozora.

Slika 22 – Izgled H3A bloka

U parametrima bloka se bira osnovna funkcija: automatsko osvetljenje/balans belog

AEW ili automatski fokus AF.

Page 52: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

49

Slika 23 – Parametri H3A bloka za automatsko osvetljenje i balans belog

U parametrima za automatsko osvetljenje i balans belog (Slika 23) se definiše veličina

i pozicija prozora na slici nad kojim se izračunava statistika, kao i broj prozora i pomeraj po

vertikali i horizontali.

Podaci koji se dobijaju za jedan prozor su:

Green sub sample accumulator

Red sub sample accumulator

Blue sub sample accumulator

Green sub sample accumulator

Green saturator accumulator

Red saturator accumulator

Blue saturator accumulator

Green saturator accumulator

Page 53: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

50

U parametrima za automatski fokus AF (Slika 24) se takođe definišu veličina i

pozicija prozora na slici nad kojim se izračunava statistika, kao i broj prozora i pomeraj.

Vrednosti koje se dobijaju za jedan region su:

Green Sum

Peak sum from IIR filter 0 (green)

Peak sum from IIR filter 1 (green)

0

Red Sum

Peak sum from IIR filter 0 (red)

Peak sum from IIR filter 1 (red)

0

Blue Sum

Peak sum from IIR filter 0 (blue)

Peak sum from IIR filter 1 (blue)

Slika 24 – Parametri H3A bloka za automatski fokus

Page 54: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

51

4.5.3 TLC skripta

U TLC skripti se nalaze struktura za postavljanje AF parametara:

PSP_AFParams H3Aparams ={

%if (LibBlockParameterValue(af_Alaw, 0) == 1)

PSP_AF_ALAW_ENABLE, /* A Law Status */

%else

PSP_AF_ALAW_DISABLE, /* A Law Status */

%endif

{

%if (LibBlockParameterValue(mEnable, 0) == 1)

PSP_AF_HMF_ENABLE, /* HMF Status */

%else

PSP_AF_HMF_DISABLE, /* HMF Status */

%endif

/* Threshold value */

%<LibBlockParameterValue(mTreshold, 0)>,

},

%switch( LibBlockParameterValue(rgbPos, 0) )

%case 1

PSP_AF_GR_GB_BAYER,

%break

%case 2

PSP_AF_RG_GB_BAYER,

%break

%case 3

PSP_AF_GR_BG_BAYER,

%break

%case 4

PSP_AF_RG_BG_BAYER,

%break

%case 5

PSP_AF_GG_RB_CUSTOM,

%break

%case 6

PSP_AF_RB_GG_CUSTOM,

%break

%default

PSP_AF_GR_BG_BAYER, /* RGB position */

%break

%endswitch

/* IIR Filter Configuration */

{

2u, /* IIR Horizontal start

*/

/*IIR Filter coefficients for set 0 */

{

64, 0, 0, 21, 22, 21, 0, 0, -16, 32, -16,

},

Page 55: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

52

/*IIR Filter coefficients for set 1 */

{

64, 0, 0, 21, 22, 21, 0, -29, -16, 32, -16,

},

},

/* Paxel Configuration */

{

%<LibBlockParameterValue(pWidth, 0)>, /* width */

%<LibBlockParameterValue(pHeight, 0)>, /* height */

%<LibBlockParameterValue(pHstart, 0)>, /* hzStart */

%<LibBlockParameterValue(pVstart, 0)>, /* vtStart */

%<LibBlockParameterValue(pHcount, 0)> , /* hzCnt */

%<LibBlockParameterValue(pVcount, 0)> , /* vtCnt */

%<LibBlockParameterValue(pLine, 0)>, /* lineIncr */

},

%if (LibBlockParameterValue(mode, 0) == 1)

PSP_AF_ACCUMULATOR_SUMMED, /* Accumulator Mode */

%else

PSP_AF_ACCUMULATOR_PEAK,

%endif

};

Struktura za postavljanje AEW parametara:

PSP_AEWParams AewParams =

{

%if (LibBlockParameterValue(aew_Alaw, 0) == 1)

PSP_AEW_ALAW_ENABLE, /* A Law Status */

%else

PSP_AEW_ALAW_DISABLE, /* A Law Status */

%endif

%<LibBlockParameterValue(satLimit, 0)>, /* Saturation limit */

{

%<LibBlockParameterValue(wWidth, 0)>, /* width */

%<LibBlockParameterValue(wHeight, 0)>, /* height */

%<LibBlockParameterValue(wHstart, 0)>, /* horizontal start */

%<LibBlockParameterValue(wVstart, 0)>, /* vertical start */

%<LibBlockParameterValue(wHcount, 0)> , /* horizontal count */

%<LibBlockParameterValue(wVcount, 0)> , /* vertical count */

%<LibBlockParameterValue(wHline, 0)>,/*horizontal line increament*/

%<LibBlockParameterValue(wVline, 0)>,/*vertical line increament */

},

{

%<LibBlockParameterValue(bwHeight, 0)>,/*black window height */

%<LibBlockParameterValue(bwStart, 0)>,/*black window vertical start*/

}

};

Page 56: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

53

Kreiranje logičkog kanala i prosleđivanje parametara se smešta u funkciju za inicijalizaciju:

afHandle = FVID_create("/H3A0",IOM_INOUT,&gioStatus,&typeAF,&gioAttrs);

FVID_control(afHandle, PSP_H3A_IOCTL_SET_PARAM, &H3Aparams))

Kod H3A bloka se prosleđivanje praznog i preuzimanje punog bafera izvršava na drugačiji

način.Prvo se podesi odgovarajuću bafer :

/* Enqueue the buffer, This will enable AEW engine */

enbufferAF.size = H3A_AF_BUFFER_SIZE;

enbufferAF.ramIpAddr = (Ptr)(arrayh3AAF);

bufferSize = sizeof(PSP_H3ABuffer);

FVID_submit(afHandle, PSP_VPSS_QUEUE,&enbufferAF,&bufferSize, NULL);

Kreiranje i podešavanje parametara je standardno kao za ostale module sistema:

aewHandle = FVID_create("/H3A0",IOM_INOUT,&gioStatus,&typeAew,&gioAttrs);

FVID_control(aewHandle, PSP_H3A_IOCTL_SET_PARAM, &AewParams);

U delu za obradu slike se postavljaju naredbe za dodeljivanje praznog i preuzimanje punog

bafera, kao i prosleđivanje pokazivača na bufer:

FVID_submit(afHandle, PSP_VPSS_DEQUEUE,&debufferAF,&bufferSize, NULL);

FVID_submit(afHandle, PSP_VPSS_QUEUE,&enbufferAF,&bufferSize, NULL);

%assign outSignalName=

FEVAL("getSignalName",LibBlockOutputSignal(0,"","",0))

%<outSignalName> =

(%<LibBlockOutputSignalDataTypeName(0,"")>*)debufferAF.ramIpAddr;

4.6 Histogram blok

Histogram modul prihvata sirovu sliku ili video (3 ili 4 boje) i slaže grupe od tačaka na

bazi vrednosti (za svaku boju posebno). Svaka grupa sadrži broj tačaka čija vrednost upada u

odgovarajući opseg.

Histogram preuzima sliku sa CCD/CMOS senzora. Podržava do četiri regiona i svaki

region ima svoju horizontalnu/vertikalnu početnu i krajnju poziciju. Ako se regioni

preklapaju tačke se akumuliraju u region najvišeg prioriteta (najveći prioritet

region0>region1>region2>region3). Broj grupa može biti 32, 64, 128 ili 256 za svaku boju

po regionu.

Page 57: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

54

Za broj regiona 1, dopušteno je 32, 64, 128 ili 256 grupa po boji

Za broj regiona 2, dopušteno je 32,64 ili 256 grupa po boji.

Za broj regiona 3 i 4, dopušteno je 32 ili 64 grupa po boji.

4.6.1 S-funkcija bloka

U datoteci histogram.c je definisana s-funkcija histogram. Ona se sastoji od sledećih

metoda:

• mdlCheckParameters(SimStruct *S)

• mdlInitializeSizes(SimStruct *S)

• mdlInitializeSampleTimes(SimStruct *S)

• mdlSetWorkWidths(SimStruct *S)

• mdlSetInputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetOutputPortDimensionInfo(SimStruct *S, int_T portIndex, const DimsInfo_T

*dimsInfo)

• mdlSetDefaultPortDimensionInfo(SimStruct *S)

• mdlSetInputPortDataType(SimStruct *S, int port, DTypeId dataType)

• mdlSetOutputPortDataType(SimStruct *S, int port, DTypeId dataType)

• mdlSetDefaultPortDataTypes(SimStruct *S)

• mdlOutputs(SimStruct *S, int_T tid)

4.6.2 Model bloka

Histogram blok (Slika 25) može da se poveže samo na CMOS senzor blok sa koga

preuzima sliku za izračunavanje histograma. Izlaz je vektor podataka veličine 512 ako je

broj grupa 32 inače 1024.

Slika 25 – Izgled histogram bloka

Page 58: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

55

U parametrima (Slika 26) se podešava pozicija i veličina regiona i može ih biti

maksimalno četiri. Pored toga može da se bira broj grupa iz padajućeg menija i skaliranje

rezultata pomeranjem u desno.

Slika 26 – Parametri histogram bloka

4.6.3 TLC skripta

TLC skripta koja odgovara modulu histogram (histogram.tlc) sadrži strukturu kojom se

sam modul podešava:

/* Histogram configuration parameters */

PSP_HISTparam histConfigParams =

{

%if (LibBlockParameterValue(oClear, 0) == 1)

PSP_HIST_CLEAR_AFTER_READ, /* clearOpDataAfterRead */

%else

PSP_HIST_NO_CLEAR_AFTER_READ, /* clearOpDataAfterRead */

%endif

%switch( LibBlockParameterValue(bin, 0) )

%case 1

PSP_HIST_32BINS, /* bins */

%break

%case 2

PSP_HIST_64BINS, /* bins */

Page 59: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

56

%break

%case 3

PSP_HIST_128BINS, /* bins */

%break

%case 4

PSP_HIST_256BINS, /* bins */

%break

%endswitch

%switch( LibBlockParameterValue(hShift, 0) )

%case 1

PSP_HIST_DATA_RSHIFT_ZERO, /* shift */

%break

%case 2

PSP_HIST_DATA_RSHIFT_ONE, /* shift */

%break

%case 3

PSP_HIST_DATA_RSHIFT_TWO, /* shift */

%break

%case 4

PSP_HIST_DATA_RSHIFT_THREE, /* shift */

%break

%case 5

PSP_HIST_DATA_RSHIFT_FOUR, /* shift */

%break

%case 6

PSP_HIST_DATA_RSHIFT_FIVE, /* shift */

%break

%case 7

PSP_HIST_DATA_RSHIFT_SIX, /* shift */

%break

%case 8

PSP_HIST_DATA_RSHIFT_SEVEN, /* shift */

%break

%default

PSP_HIST_DATA_RSHIFT_TWO, /* shift */

%break

%endswitch

{

%<LibBlockParameterValue(wbGain1, 0)>, /* wbGain[0] */

%<LibBlockParameterValue(wbGain2, 0)>, /* wbGain[1] */

%<LibBlockParameterValue(wbGain3, 0)>, /* wbGain[2] */

%<LibBlockParameterValue(wbGain4, 0)> /* wbGain[3] */

},

{

{

%<LibBlockParameterValue(reg0_hs, 0)>,/* region[0].hStart */

%<LibBlockParameterValue(reg0_he, 0)>,/* region[0].hEnd */

%<LibBlockParameterValue(reg0_vs, 0)>,/* region[0].vStart */

%<LibBlockParameterValue(reg0_ve, 0)> /* region[0].vEnd */

},

{

%<LibBlockParameterValue(reg1_hs, 0)>,/* region[1].hStart */

%<LibBlockParameterValue(reg1_he, 0)>,/* region[1].hEnd */

%<LibBlockParameterValue(reg1_vs, 0)>,/* region[1].vStart */

%<LibBlockParameterValue(reg1_ve, 0)> /* region[1].vEnd */

},

Page 60: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

57

{

%<LibBlockParameterValue(reg2_hs, 0)>,/* region[2].hStart */

%<LibBlockParameterValue(reg2_he, 0)>,/* region[2].hEnd */

%<LibBlockParameterValue(reg2_vs, 0)>,/* region[2].vStart */

%<LibBlockParameterValue(reg2_ve, 0)> /* region[2].vEnd */

},

{

%<LibBlockParameterValue(reg3_hs, 0)>,/* region[3].hStart */

%<LibBlockParameterValue(reg3_he, 0)>,/* region[3].hEnd */

%<LibBlockParameterValue(reg3_vs, 0)>,/* region[3].vStart */

%<LibBlockParameterValue(reg3_ve, 0)> /* region[3].vEnd */

}

}

};

Kreiranje logičkog kanala i prosleđivanje parametara je standardno:

histHandle= FVID_create("/histogram",IOM_INPUT, &gioStatus,

hEdma,&gioAttrs);

FVID_control(histHandle, PSP_HIST_IOCTL_SET_PARAMS,&histConfigParams)

Povezivanje praznog bafera u red se vrši kao i za H3A blok:

FVID_submit(histHandle, PSP_VPSS_QUEUE,(Ptr)(&inbuff[par]),

(Ptr)(&sizeOfbuff), NULL)

Pri obradi video slike razmena praznog i punog bafera i prosleđivanje pokazivača sledećem

bloku je data u narednom delu koda:

FVID_submit(histHandle, PSP_VPSS_DEQUEUE,(Ptr)(&outbuff),

(Ptr)(&sizeOfbuff), NULL) )

%assign outSignalName = FEVAL("getSignalName", LibBlockOutputSignal(0, "",

"", 0))

%<outSignalName> = (%<LibBlockOutputSignalDataTypeName(0,"")> *)

outbuff->ramIpAddr;

Page 61: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

58

5 Ispitivanje

Ispitivanje je obavljeno startovanjem simulink modela koji sadrže date blokove i

proveravanjem ispravnosti rada generisanog koda.

Svaki model mora da sadrži:

DM6437EVM blok u kome su podešavanja za konfiguraciju ploče.

DSP/BIOS blok koji definiše naziv niti, prioritet, memoriju koju će koristiti i veličinu

magacinske memorije.

Blok funkcije, koji sadrži korisnički model koji će biti izvršavan u niti definisanoj u

DSP/BIOS bloku.

Kod ispitivanja H3A i histogram bloka korišćen je pomoćni blok „To File“ koji ulazni

vektor upisuje u zadatu datoteku.

Slika 27 – Izgled osnovnog modela

Page 62: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

59

5.1 Ispitivanje CMOS senzor bloka

Ispitivanje ovog bloka je je prvo urađeno modelom “s kraja na kraj” (eng.loopback), gde

se slika sa CMOS senzora šalje direktno na izlaz. Izlaz je u kompozit PAL formatu i povezuje

se na bilo koji uređaj odnosno ekran koji ima kompozitni ulaz. U ovom slučaju DM6437

EVM ploča radi kao obična kamera i prikazuje sliku koju prima senzor, na ekran.

Generisanje koda je ispitivano sa raznim podešavanjem parametara CMOS senzor

bloka i slika je bila promenjena u skladu sa promenjenim parametrima.

Slika 28 – Osnovni primer upotrebe CMOS senzor bloka

Slika 29 – Prikaz slike sa senzora na ekran

Page 63: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

60

Model koji vrši obradu sa slikom kojim je blok testiran je prikazan na slici 30. Ovde

se slika sa CMOS senzor bloka prvo odgovarajućim blokom razdvaja u komponente Y Cb Cr.

Nad Y komponentom se vrši obrada, odnosno detektuje se pomeraj na slici. Slika sa

obrađenom detekcijom pokreta se ponovo prepliće sa komponentama boje i šalje na izlazni

blok.

Slika 30 –Primer modela za detekciju pokreta sa CMOS senzor blokom

Slika 31 –Prikaz slike sa detekcijom pokreta

Page 64: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

61

5.2 Ispitivanje skalera slike

Ispitivanje je odrađeno u modelu u kome blok prima sliku sa CMOS senzor bloka,

skalira sliku i šalje na izlaz. Skaliranje je testirano povećavanjem i smanjivanjem slike.

Slika 32 –Primer modela sa upotrebom bloka za skaliranje slike

5.3 Ispitivanje H3A bloka

Modul H3A odrađuje statistiku slike koja može da se koristi za regulaciju osvetljenja i

balansa belog ili automatski fokus. U ovom slučaju blok može da se poveže samo na CMOS

senzor blok pošto se statistika izračunava samo na slici u bajer formatu. Izlazne vrednosti su

zarad provere povezane na “To File” pomoćni blok koji generiše kod kojim se podaci upisuju

u zadatu datoteku.

Slika 33 –Primer modela sa upotrebom H3A bloka

Page 65: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

62

5.4 Ispitivanje histogram bloka

Histogram modul takođe izračunava tražene podatke sa slike bajer formata tako da je i u

testnom modelu povezan na CMOS senzor blok. Izlaz se upisuje u zadatu datoteku pomoću

“To File” bloka. Izlazni podaci se mogu kopirati u dati šablon za program “excel” i videti

histogram dijagram.

Slika 34 – Primer modela sa histogram blokom

Slika 35 – Histogram jednog regiona

Page 66: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

63

6 Zaključak

U ovom radu je opisano jedno rešenje automatskog generisanja koda na osnovu Simulink

modela na ploči DM6437EVM sa povezanim CMOS senzorom MT9P031. Ovakvim

generisanjem koda korisniku je prepušteno da se posveti samoj obradi ne obraćajući pažnju

na nivo ispod, odnosno samu implementaciju. Dovoljno je da poznaje radu u Simulink

okruženju.

Prednosti ovakvog „programiranja“ su:

Doslednost i ekvivalentnost sepecificiranog modela i implementacije.

Visok i konzistentan kvalitet generisanog koda uzevši u obzir greške i čitljivost.

Efikasnija faza implementacije

Brža izrada prototipova projekta

Uz moćnu platformu kakva je DM6437EVM čak i mnoge zahtevne obrade će raditi u

realnom vremenu što povećava upotrebljivost ovog rešenja za ispitivanje i razvoj programske

podrške za obradu slike.

Dalji razvoj je moguć dodavanjem dodatnih blokova koje ploča podržava kao što je

modul za audio obradu ili serijske sprege čime bi se pokrila kompletna audio-video obrada i

kreiranjem biblioteke. A izradom namenskih blokova za specifičnu obradu i mogućnost

dodavanja korisničkih blokova na osnovu gotovog koda bi se proširila mogućnost upotrebe.

Page 67: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

64

7 Literatura

[1] TMS320DM6437 EVM Technical Reference, March 2007

[2] TMS320DM6437 Digital Media Processor (Rev. D)

[2] TMS320DM643x DMP Video Processing Front End (VPFE) User's Guide (Rev. A)

[3] Understanding the Davinci Preview Engine (Rev. A)

[3] www.ti.com

[4] http://focus.ti.com/docs/prod/folders/print/tms320dm6437.html

[5] http://www.mathworks.com/

[6] http://www.mathworks.com/access/helpdesk/help/helpdesk.html

Page 68: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

65

8 Dodatak

8.1 Podizanje sistema iz NAND memorije

Da bi se ugrađeni program za podizanje sistema-boot loader podesio za podizanje sistema

iz NAND memorije potrebno je bootmode ( BM[3:0] ) podešavanja u BOOTCFG registru

podesiti na 0111. Što se na DM6437EVM razvojnoj ploči podešava uz pomoć prekidača SW1

kao na slici 36.

Slika 36 – Raspored prekidača na ploči za podizanje sistema iz NAND memorije

Podešavanje izlaznih pinova EMIF-e se podešava pomoću registra PINMUX0 i polja AEM

[2:0]. AEM polje može biti podešeno na dva načina, a uz pomoć SW2 grupe prekidača:

100 - 8-bit EMIFA (NAND) + 8-bit CCDC (VPFE) + 16-bit VENC (VPBE)

101 - 8-bit EMIFA (NAND) + 16-bit CCDC (VPFE) + 8-bit VENC (VPBE)

Bootloader prihvata informacije u formi skripte, nazvane AIS (eng. Application Image

Script). Ova skripta je binarna datoteka koja sadrži razne komande koje interpretira i izvršava

booloader. Prevedeni kod se uz pomoć perl skripte genAIS.pl prevodi u AIS format a

upisivanje u NAND memoriju se vrši pomoću projekta NANDwriter. Čime je ploča spremna

za podizanje program sistema iz NAND memorije.

Page 69: Diplomski Master rad - University of Novi · PDF fileFAKULTET TEHNIČKIH NAUKA ... mane takvog programiranja su loša čitljivost, kompleksnost koda i nemogućnost konvertovanja na

66

8.2 Primer modela za prenosa slike preko LAN-a

Pošto ploča sadrži EMAC kontroler, omogućen je prenos podataka preko LAN

(eng.Local Area Network) mreže. U datom primeru (Slika 37) slika se preuzima sa CMOS

senzora i preko TCP/IP konekcije šalje prijemnoj strani. Prijemna strana (Slika 38) je model

koji se izvršava na PC računaru, i prikazuje primljenu sliku u video prozoru (Slika 39).

Slika 37 – Primer modela za slanje slike preko TCP/IP protokola

Slika 38 – Primer modela za prijem slike na PC računaru

Slika 39 – Video prozor za prikaz slike