1 / 40

Symbian ohjelmointi

Symbian ohjelmointi. 2. Luento Juha Turunen (juha.turunen@lut.fi). 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

jonco
Télécharger la présentation

Symbian ohjelmointi

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Symbian ohjelmointi • 2. Luento • Juha Turunen (juha.turunen@lut.fi)

  2. Sisältö • Deskriptorit • Dynaamiset tietorakenteet • DLL • Tiedostojärjestelmä

  3. 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

  4. 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

  5. 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ä

  6. B L A H Esimerkkideskriptori • Length = 4 • Maximum length = 8 • Size = 4 tai 8 (ASCII vs. UNICODE)

  7. 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

  8. _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

  9. Deskriptorien luokkahierarkia TDesC iLength Ptr() TDes Length() iMaxLength TBufCBase MaxLength() TBufC<n> TBuf<n> TPtr TPtrC HBufC iPtr iBuf : TText[n] iPtr iBuf : TText[n]

  10. 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

  11. 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!

  12. Buffer-deskriptori • Luokka itsessään sisältää bufferin eli muistin johon data sijoitetaan • class NonSymbianSomething { • private: • char [10] buffer; • };

  13. 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

  14. 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

  15. 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; • };

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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?

  23. 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

  24. 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

  25. 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.

  26. CArrayFixFlat<Class T>

  27. segmentit linkitetty toisiinsa muodostaen jatkuvan listan element_n element_n + 1 element_n + 3 element_n+4 element_n + 5 CArrayFixSeg<Class T>

  28. CArrayVarFlat<Class T>

  29. segmentit linkitetty toisiinsa muodostaen jatkuvan listan element_n element_n+1 element_n+3 element_n+4 element_n+5 CArrayVarSeg<Class T>

  30. 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( )

  31. DLL:t

  32. 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

  33. Static interface DLL

  34. 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

  35. 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 }

  36. 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

  37. User Library File Server Kernel Device Drivers Tiedostojärjestelmä F32 • Hoitaa ohjelmien lataamisen Kernelille • Server • Tarjoaa • Tiedostot ja hakemistot • Drivet • Tiedostonimien parsinta • Streamit

  38. 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

  39. File Server RFs Session App 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

More Related