40
TEKNIIKAN JA TALOUDEN YLIOPISTO www.lut.fi

Symbian ohjelmointi

  • Upload
    jonco

  • View
    38

  • Download
    0

Embed Size (px)

DESCRIPTION

Symbian ohjelmointi. 2. Luento Juha Turunen ([email protected]). Sisältö. Deskriptorit Dynaamiset tietorakenteet DLL Tiedostojärjestelmä. Deskriptorit. Deskriptorit ovat perusluokkia Symbian OS:ssa Deskriptorit kapseloivat tavan säilyttää ja käsitellä teksti- tai binäärimuotoista dataa - PowerPoint PPT Presentation

Citation preview

Page 1: Symbian ohjelmointi

TEKNIIKAN JA TALOUDEN YLIOPISTO

www.lut.fi

Page 2: Symbian ohjelmointi

Symbian ohjelmointi

2. Luento

Juha Turunen ([email protected])

Page 3: Symbian ohjelmointi

Sisältö

• Deskriptorit• Dynaamiset tietorakenteet• DLL• Tiedostojärjestelmä

Page 4: Symbian ohjelmointi

Deskriptorit

• Deskriptorit ovat perusluokkia Symbian OS:ssa• Deskriptorit kapseloivat tavan säilyttää ja käsitellä teksti- tai

binäärimuotoista dataa– Java: String– C: str*() ilman null terminationia– STL: string

• Deskriptorien käyttö suojaa tahattomilta muistialueen ylityksiltä ja muilta virhetilanteilta– Tietoturva

• Deskriptoriluokkia on useita erilaisia, mutta ne kaikki periytyvät yhteisestä kantaluokasta

Page 5: Symbian ohjelmointi

ASCII & UNICODE

• ASCII vs. UNICODE• Kaikista deskriptoriluokista on 8- ja 16-bittiset variantit• Variantti valitaan käännösaikaisesti (e32def.h)• Merkkijonoja varten käytetään käännösaikaisesti valittua varianttia

(TDesC, TDes, TPtr, jne...)• Binääridataa varten käytetään luonnollisesti 8-bittistä varianttia

(TDesC8, TDes8, jne...)

typedef TPtrC16 TPtrC

#if defined (_UNICODE)

else ... typedef TPtrC8 TPtrC

Page 6: Symbian ohjelmointi

Deskriptorien terminologia

• Length– Kuinka monta tietoalkiota deskriptori sisältää

• Size– Kuinka monta tavua validia dataa deskriptori sisältää– ASCII vs. UNICODE

• Maximum length– Kuinka monta tietoalkiota maksimissaan kyseinen deskriptori voi

sisältää• Buffer

– Pala muistia, jossa deskriptorin sisältämä data säilytetään– Stackissa tai heapissa riippuen deskriptorin tyypistä

Page 7: Symbian ohjelmointi

Esimerkkideskriptori

• Length = 4• Maximum length = 8• Size = 4 tai 8 (ASCII vs. UNICODE)

B L A H

Page 8: Symbian ohjelmointi

Puskuriylivuoto ongelma

• Kaikki deskriptorit sisältävät pituudesta ja maksimipituudesta =>– Mahdotonta alustaa deskriptori datalla jonka pituus

ylittää maksimipituuden– Mahdotonta kopioida deskriptoriin dataa jonka pituus

ylittää maksimipituuden– Mahdotonta muokata deskriptoria siten että datan

pituus ylittää maksimipituuden• Virhetilanteet aiheuttavat panicin

Page 9: Symbian ohjelmointi

_LIT makro

• _LIT makrolla luodaan literaaleja, jotka sisältävät muuttumatonta dataa– TLit8 TLit16

• TLit luokille on määritelty muunnosoperaattori deskriptoriksi (TDesC&), joten niitä voidaan käyttää deskriptorien asemasta

• _LIT( KSymbianProgramming, ”aaargh” );• Literaalia ei voi muokata!

_LIT( KSomeText, ”puuroa!” );

void SomeMethodL( const TDesC& aString );

SomeMethodL( KSomeText ); // This is OK

Page 10: Symbian ohjelmointi

Deskriptorien luokkahierarkia

TDesCiLengthPtr()Length()

TBufCBaseTDesiMaxLength

MaxLength()

TPtrCiPtr

TBufC<n>iBuf : TText[n]

HBufC TPtriPtr

TBuf<n>iBuf : TText[n]

Page 11: Symbian ohjelmointi

Deskriptorikantaluokat

• TDesC– Kaikkien deskriptorien kantaluokka– Kaikille deskriptoreille yhteiset metodit– C = constant– Ei voi muokata

• TDes– Laajentaa TDesC:n määrittelemää toiminnallisuutta lisäämällä

datan muokkaukseen tarvittavat metodit– MaxLength

• Molemmat kantaluokat ovat abstrakteja => niistä ei voi luoda instansseja

Page 12: Symbian ohjelmointi

Konkreetit deskriptoriluokat

• TBufC– Buffer deskriptori– Ei muokattava

• TBuf– Buffer deskriptori– Muokattava

• TPtrC– Pointer deskriptori– Ei muokattava

• TPtr– Pointer deskriptori– Muokattava

• HBufC– Heap deskriptori– Ei suoraan muokattava– Ei stackiin!

Page 13: Symbian ohjelmointi

Buffer-deskriptori

• Luokka itsessään sisältää bufferin eli muistin johon data sijoitetaan

class NonSymbianSomething {

private:

char [10] buffer;

};

Page 14: Symbian ohjelmointi

TBufC

• Bufferi deskriptori > luokka itsessään sisältää bufferin• Templaattiluokka jonka templaattiparametri määrittää bufferin koon.

– esim. TBufC< 42 > myDescriptor;• Sisältö voidaan asettaa ainoastaan joko konstruktorissa tai

sijoitusoperaattorilla– Jos deskriptori on liian pieni => panic

_LIT( KHello, ”Hi!” );

_LIT( KMoi, ”Moro” );

TBufC greeting( KHello ); // constr. init

greeting = KMoi; // Assignment operator

iLength buffer

Page 15: Symbian ohjelmointi

TBuf

• Bufferi deskriptori => luokka itsessään sisältää bufferin• Templaattiparametri määrittää maksimikoon• Deskriptori voi olla enintään iMaxLength pituinen• Sisältöä voi muokata• Toteuttaa TDes –luokan määrittelemät metodit

iLength iMaxLength buffer

Page 16: Symbian ohjelmointi

Pointer-deskriptori

• Pointer-deskriptori ei omista eikä sisällä itse dataa vaan osoittaa jonkun muun omistamaa dataa

• Jos dataa muokataan pointer-deskriptorin kautta, muuttuu luonnollisesti myös datan omistavan deskriptorin sisältö

class NonSymbianOwningSomething {

private:

char* buffer;

};

Page 17: Symbian ohjelmointi

TPtrC

• Pointer-deskriptori• Osoittaa ulkopuolista dataa• Ei mahdollisuutta muokata (C)• Set()• Huom! Jos osoitettu data lakkaa olemasta validia, ei

deskriptoria voi enää käyttää

_LIT( KJep, ”Juu” );

TBuf<8> myDesc;

myDesc.Copy( KJep );

TPtrC pointer( myDesc );

iLength iPtr buffer

Page 18: Symbian ohjelmointi

TPtr

• Pointer-deskriptori• Osoittaa ulkopuolista dataa• Datan muokkaaminen mahdollista• Huom! Jos osoitettu lakkaa olemasta validia, lakkaa

myös TPtr olio olemasta validi

_LIT( KJep, ”Juu” );

_LIT( KJoo, ”joo” );

TBuf<8> myDesc;

myDesc.Copy( KJep );

TPtr pointer( myDesc );

pointer.Append( KJoo );

iLength iMaxLength iPtr buffer

Page 19: Symbian ohjelmointi

HBufC

• Heap-deskriptori• Sisältää oman bufferinsa• Varataan ainoastaan heapista!• Käytetään isoille määrille dataa• Muokkaus onnistuu hankkimalla pointer-deskriptori dataan ja

muokkaamalla dataa sen avulla– Des()

HBufC* myBuf = HBufC::NewL( 50 );

TPtr ptr( myBuf->Des() );

ptr->Copy( KJep );

ptr->Append( KZap );

...iLength buffer

Page 20: Symbian ohjelmointi

Ohjeita deskriptorin valintaan

• TBuf/TBufC– Pieni määrä dataa

• Myös suuri määrä OK heapista varatun olion jäsenmuuttujana

– Maksimikoko tiedossa jo käännösaikaisesti– Yleensä stackista väliaikaiseen käyttöön

• TPtr/TPtrC– Jo olemassa olevaan dataan viittaaminen tai käsittely– Säästää muistia koska turhia kopioita ei synny– Kätevä esim. parsimisessa– TPtr HBufC:n sisällön muokkaamiseen

• HBufC– Suuri koko– Maksimikoko ei tiedossa käännösaikaisesti

Page 21: Symbian ohjelmointi

Yhteenveto deskriptoreista

• Tarjoavat turvallisen tavan käsitellä ja osoittaa teksti- ja binäärimuotoista dataa

• ASCII vs. UNICODE• TBuf, TBufC, TPtr, TPtrC voidaan varata stackista tai

käyttää jäsenmuuttujina by value• HBufC – suuret määrät dataa, varataan heapista• TDesC metodit käytettävissä kaikilla deskriptoreilla• Käytä metodien argumentteina TDesC tai TDes luokkien

viittauksia

Page 22: Symbian ohjelmointi

Dynaamiset taulukot

• Symbian OS tarjoaa turvallisen tavan käsitellä taulukko/lista muotoista dataa

• Valmiita taulukkoluokkia käyttämällä vältyt vahingoilta• Templaattiluokkia -> voidaan soveltaa minkä tahansa

luokan kanssa

Page 23: Symbian ohjelmointi

Flat vs. Segment

• Flat– Muisti varataan kerralla ja kaikki alkiot sijaitsevat samassa

varatussa muistisolussa– Jos koko kasvaa yli kapasiteetin, varataan enemmän muistia ja

kopioidaan data sinne• Segmented

– Muistia varataan tarvittaessa lisää segmentti kerrallaan– Segmentit ovat linkitetty yhteen

• Valintaan vaikuttavat tekijät– Kuinka usein tarvitsee lisätä tai tuhota alkioita taulukon keskelle– Onko alkioihin viittaaminen aikakriittistä?– Kuinka usein taulukon koko muuttuu?

Page 24: Symbian ohjelmointi

Taulukkoalkiot

• Taulukon sisältämä alkio määritellään taulukkoluokan templaattiparametrilla– Esim: CArrayPtrSeg<CMyClass>

• Yleensä alkiot osoittimia olioihin, mutta taulukko voi myös sisältää oliot

• Fixed vs. variable alkiot– Fixed: taulukon oma bufferi pitää sisällään alkiot (vrt.

TBuf)– Variable: taulukon jokainen alkio sijaitsee erikseen

sille varatussa muistisolussa ja taulukko sisältää osoittimet olioihin

Page 25: Symbian ohjelmointi

Taulukkojen terminologiaa

• Kapasiteetti (capacity)– Tämän hetkinen taulukon koko alkioissa mitattuna

• Granulariteett (granularity)– Jos kapasiteetti ylitetään, kuinka monelle uudelle

alkiolle varataan tilaa kerrallaan

Page 26: Symbian ohjelmointi

Konkreetit taulukkoluokat

• Alkiot omassa bufferissa– CArrayFixFlat<Class T>– CArrayFixSeg< Class T>– CArrayPakFlat<Class T>

• Alkiot omissa heap soluisssa ( taulukko sisältää pointterit )– CArrayVarFlat<Class T>– CArrayVarSeg< Class T>

• Fix = fixed length, Var = variable length, Pak = packed– Kts edelliset kalvot.

• Flat = flat , Seg = segmented– Kts edelliset kalvot.

Page 27: Symbian ohjelmointi

CArrayFixFlat<Class T>

element_0 element_1 element_2

array buffer

Page 28: Symbian ohjelmointi

CArrayFixSeg<Class T>

element_n element_n + 1 element_n + 3

segmentit linkitetty toisiinsamuodostaen jatkuvan listan

element_n+4 element_n + 5

Page 29: Symbian ohjelmointi

CArrayVarFlat<Class T>

element_0 element_1 element_2

array buffer

Page 30: Symbian ohjelmointi

CArrayVarSeg<Class T>

segmentit linkitetty toisiinsamuodostaen jatkuvan listan

element_n element_n+1 element_n+3

element_n+4 element_n+5

Page 31: Symbian ohjelmointi

Mikä on DLL?

• Dynamic Link Library• Ladataan dynaamisesti muistiin

– ROM:lla sijaitsevia DLL:ja voidaan ajaa suoraan ROM:lta

– Kuitenkin vain mikäli on käytetty NOR flashia• Exportointi• DLL: n rakenne

– Constant static data– Exportoidut funktiot– Export table

• Järjestysnumero->osoite mapping• E32Dll( )

Page 32: Symbian ohjelmointi

DLL:t

.dll

.exe DLLFunction call

Static interface DLL

.h .lib

Application

Polymorphic interface DLL

.app

.ldd

.pdd

two types

.h

Page 33: Symbian ohjelmointi

DLL

• Static interface DLL– Yksi tai useampi exportoitu funktio– .h tiedosto määrittää rajapinnan (compile-time)– .lib tiedosto metodi->ordinaali mapping (link-time)– .dll tiedosto sisältää ajettavan koodin (run-time)

• Polymorphic interface DLL– Sisältää yhden tai useamman määritellyn exportin– DLL: n käyttäjä saa export in kautta instanssin luokkaan, jonka

kautta komponenttia käytetään– Pluginit

• Symbian GUI applikaatiot ( .app) ovat polymorfisia DLL:ja

Page 34: Symbian ohjelmointi

Static interface DLL

Fn1()

Fn4()

123456...

code

Clientexecutable

X.dll

123456...

EXPORT_C void Fn1()

code

X.lib

exportstable

.

.

.

.

.

.EXPORT_C void Fn4()

X.h

IMPORT_C void Fn1()

IMPORT_C void Fn4()

#include "x.h"

.

.

.

Page 35: Symbian ohjelmointi

DLL käytännössä

• Funktioden kutsuminen DLL: sta– #include <header.h>– MMP- filessä: LIBRARY MyDll.lib

• DLL: n luominen– MMP- filessä

• TARGET MyDll.dll• TARGETTYPE DLL• UID 0x1000008d KMyDllUid

– Kääntäjä luo .lib-tiedoston

Page 36: Symbian ohjelmointi

Dll käytännössä

• Funktio, jota halutaan kutsua DLL:n ulkopuolelta pitää exportoida

– Makrot: EXPORT_C ja IMPORT_C

– Headerissa (.h)

class MyClass

{

public:

IMPORT_C void DoSomething();

private:

void SomethingElse();

};– Koodissa (.cpp)

EXPORT_C void MyClass::DoSomething()

{

// blah blah

}

Page 37: Symbian ohjelmointi

DLL:sta saatavat hyödyt

• Tehokas muistin käyttö– DLL tarvitsee ladata vain kerran vaikka käyttäjiä olisi

useampi• Koodin uudelleenkäyttö

– Työn säästö– Tilan säästö

• Kapselointi• Polymorfisilla DLL:lla plugin-arkkitehtuurit

Page 38: Symbian ohjelmointi

Tiedostojärjestelmä F32

• Hoitaa ohjelmien lataamisen Kernelille• Server• Tarjoaa

– Tiedostot ja hakemistot– Drivet– Tiedostonimien parsinta– Streamit

UserLibrary

UserLibrary

FileServer

FileServer

KernelKernel DeviceDrivers

DeviceDrivers

Page 39: Symbian ohjelmointi

Tiedostojärjestelmä

• VFAT– Tiedostonimet– DOS/Windows tyyliset tiedostonimet– ”c:\nokia\images\pic.jpg”– . ja .. eivät tuettuja

• Tukee erillaisia mediatyyppejä– ROM– FLASH RAM– MMC– CF

Page 40: Symbian ohjelmointi

File server session

• RFs luokka kapseloi session• Yhteys clientilta file serverille• Yhdellä threadilla voi olla useita yhtäaikaisia sessioita

auki• Päätoiminnot

– Tiedonsiirto– Tiedostojen ja hakemistojen hallinta

RFsSession

FileServer

FileServer AppApp