Download presentation
Presentation is loading. Please wait.
1
Symbian OS介绍 陈永华 2008.5.30 2018/12/30
2
主要介绍内容: 一、基本简介; 二、OS60版本分类; 三、开发环境搭建; 四、基本数据类型; 五、命名规则;
六、内存管理机制---异常退出和清除栈; 七、描述符; 八、真机移植 2018/12/30
3
一、基本简介 Symbian是当前和未来的最重要的主流智能手机操作系统之一。
Symbian是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝牙、以及3G等技术。Symbian主要用于高端的智能手机,其开发语言为C++。Symbian 是真正的微核操作系统,所谓“微核”,就是说操作系统只有很小的一部分是运行在最高优先级的,其他的功能都是以Client-Server的方式提供。 2018/12/30
4
二、OS60版本分类 Series 60 第一版OS 6.1 Series 60 第二版OS 7.0s
Series 60 第二版Pack 1 OS 7.0、8.0a、8.1a; Series 60 第三版OS 9.1 、9.2、9.3、9.5 2018/12/30
5
开发包支持的集成开发环境工具有很多种,主要如下:
1、Microsoft Visual Studio 6 / Visual C++ 6 2、Microsoft Visual Studio .NET [2003] / Visual C++ 7 3、Microsoft Visual Studio .NET [2005] / Visual C++ 8 3、Borland C++ Builder 6 4、Borland C++ Builder X 1.0 5、Metrowerks CodeWarrior Studio for Symbian Personal/Professional 2.0/2.5 特别注意:版本不同,应用功能不同,每个版本严格对它的操作系统与SDK,版本应用向前不完全兼容性,移植时特别注意。第三版是现在的主流,更是将来的主流,现在我们用的是主流版第三版OS9.2 ,开发环境: VC2003。 2018/12/30
6
三、开发环境搭建 准备工作: 1)安装好microsoft office frontpage
2)XP组件中的IIS项中的frontpage扩展; 3)准备下列软件: ⑴ ActivePerl ⑵ J2RE ⑶ Series 60 SDK(即S60 3rd Edition FP1) ⑷ Microsoft Visual Studio.Net 2003 ⑸ Carbide.vs 注:由于开发需要,建议同时安装S60 2rd Edition pack2 FP2 2018/12/30
7
1)安装Microsoft Visual Studio.Net 2003。建议安装在C盘下program files,选择默认安装;
安装工作: 做好准备工作后,开始环境安装,一共需要安装下列软件,且按如下安装顺序: 1)安装Microsoft Visual Studio.Net 2003。建议安装在C盘下program files,选择默认安装; 2)安装ActivePerl 。建议安装在C:\symbian目录下; 3)安装J2RE。建议安装在C盘,选择默认安装 4)安装S60 2rd Edition pack2 FP2。建议安装在C盘,选择默认安装 5) 安装S60 3rd Edition FP1。建议安装在C盘,选择默认安装 6) 安装Carbide.vs。建议安装在C盘,选择默认安装 2018/12/30
8
① 打开VS.NET,新建symbian项目:命名为TestHello,确定 进入symbian project页面,
测试安装成功与否: ① 打开VS.NET,新建symbian项目:命名为TestHello,确定 进入symbian project页面, project type选:symbian 第三版工程; Classic 第二版工程; project template选:S60 3rd Ed.Hello World Application, Select SDKs中选定打勾,finish 说明:WINSCW为在PC机上版本,GCCE为手机用版但可以都选择 编译、执行。 具体测试如下图所示: 2018/12/30
9
2018/12/30
10
2018/12/30
11
2018/12/30
12
2018/12/30
13
2018/12/30
14
四、基本数据类型 Symbian OS 使用的是面向对象的C++, 但是又和标准的C++有一些区别。
比如:Symbian OS没有标准的异常处理(Exception), 因为设计Symbian OS的时候C++还没有把异常处理标准化。 所以Symbian设计了自己得异常处理机制: TRAP, leave. 另外就是今天要讲的基本类型。 Symbian 基本上不使用任何标准的C++基本类型,不同的C++编辑器对int, unsigned int的长度理解不同, Symbian OS中使用TInt8,TInt16,TInt32。 如果没有某一特定的长度时,要使用Tint。其他很多类型也遵守这个原则。 比如TBuf8, TBuf16没有特定长度时最好用Tbuf。 2018/12/30
15
TText8 字符相当于 unsigned char TText16 字符相当于 unsigned short int
基本数据类型及描述 基本数据类型 描述 TInt8, TUint 位 整数 TInt16, TUint 位 整数 TInt32, TUint 位 整数 TInt, TUint 位 整数 TReal32, TReal 实数 TText 字符相当于 unsigned char TText 字符相当于 unsigned short int TBool 布尔 ETrue (= 1) EFalse (= 0) Tany 相当于void 2018/12/30
16
Symbian OS 使用很多代码规范,使用他们可以增强Symbain 代码的可读性, 有些规范甚至是需要严格遵守的, 比如类的命名:
T 类 1、拥有 ’T’ 前缀,可以象C++中基本类型一样使用; 2、他们通常很小,一般分配在栈空间,但也可以在堆上建立,当存在潜在的异常退出(Leave)的可能时,指向类对象的指针应当首先压入清除栈中,然后再调用相关代码。 3、在发生异常退出后,T类对象的内存空间被收回,但是没有调用析构函数。如:TInt i,j; 2018/12/30
17
1、拥有 ’C’ 前缀, C类总是从 CBase 类上继承而来,C代表他们从CBase类继承而来,在e32base.h中定义;
1)安全的构造和析构,两阶段构造: 允许在构造的时候进行安全初始化 (例如, 内存分配) ,因为在构造时可能引起潜在的异常退出和内存泄露 两阶段构造是一种模式,其特点是所有的构造函数都是private或者protected类型,提供了静态工厂函数,通常称为NewL() 或者 NewLC(); 2.)成员数据零初始化 3、C类通常很大,包含的成员数据在创建阶段的初始化时可能会失败,例如分配内存空间或者打开一个资源句柄 如:CExample *example = new (Eleave) CExample; 2018/12/30
18
1、拥有 ’R’ 前缀,R代表资源(Resource) ;
如:Open(),Connect() , Initialize() , Close() 经常犯的错误就是忘记调用Close()方法 ,这可能导致严重的内存泄露 如:RTimer timer; timer.CreateLocal( );//创建本地时钟 … timer.Close(); 2018/12/30
19
1、也叫混合类,拥有 ’M’ 前缀,创建M类的目的是 — 定义一个接口
2、特点1)永远不含任何成员数据; 2)永远不含构造函数、析构函数或重载描述符,M类不可以实例化; 3)声明的是纯虚函数,用作抽象接口。 3、一个从M类派生的具体类通常是从CBase类继承而来的,从一个或者多个混合类派生,并实现其接口函数,正确的类继承顺序是,总是把CBase类放在最前面: class CCat : public CBase, public MDomesticAnimal{...}; 而不能: class CCat : public MDomesticAnimal, public CBase{...}; 4、举例:class MVideoPlayerUtilityOberver //视频播放类 { public: virtual void MvpuoOpenComplete(TInt aError) = 0;//设备打开 virtual void MvpuoPlayComplete(TInt aError) = 0;//准备播放 } 2018/12/30
20
五、命名规则----symbian命名很重要
作用:这样易于检查特定的清除相关的规则。 1、成员变量:定义时一般以i开头。如TInt iValue; 2、枚举变量:定义时起开名称以T开头,各成员以 E开头,如 enum TMonth {EJanuary = 1, EFebruary = 2, ..., EDecember = 12} 3、常 量 :以 K开头。如KMaxFileName; 4、函数形参:定义时以 a开头。如aDevice, Ax; 5、函数命名:第一个字母大写,后缀D表示对对象进行删除,后缀L表示有可能Leave,后缀C表示函数中有变量需要旋转于清理栈中;函数名称暗示了他们是做什么的。对于返回内部成员变量的函数,他的名称一般使用去掉首字母i的该变量名称。如: inline RWindow& Window() const { return iWindow; }; 6、自由变量:无明确前缘,但要求以小写字母开头等。 2018/12/30
21
六、内存管理机制---异常退出和清除栈 1、Symbian OS 被设计为可以在只有有限内存的设备上良好运行的系统,它使用清除栈来保证在错误发生时不会发生内存泄漏,如果一个函数可能会异常退出,它的名字结尾必须以“L”为后缀,这点非常重要。 2、Symbian OS 的两个最基本的编程模式是: 1)异常退出(Leave)轻量级的异常; User::Leave() 或 User::LeaveIfError(),近似于 C++ 中的 throw指令 TRAP宏,可以看作 try 和 catch 组合,每一个 TRAP对执行规模和执行速度有影响,TRAPS 的数量应尽可能减少 2)清除栈(Cleanup Stack),它是用来管理发生异常退出事件时的内存资源和其他资源的。 2018/12/30
22
典型的异常退出的例子 1.使用重载 new 操作符来分配内存 2.将一些对象压入清除栈顶端 3.调用一个可能异常退出方法
TInt UseCat(CCat* aCat); CCat* InitializeCatL() { CCat* cat = new(ELeave) CCat(); // (1) CleanupStack::PushL(cat); // (2) cat->InitializeL(); // (3) User::LeaveIfError(UseCat(cat)); // (4) CleanupStack::Pop(cat); return (cat); } 1.使用重载 new 操作符来分配内存 2.将一些对象压入清除栈顶端 3.调用一个可能异常退出方法 4.调用会返回错误码的非异常退出函数,该函数被一个会产生异常退出的系统函数所包裹 2018/12/30
23
清除栈 1、使用清除栈使代码成为异常退出安全, 这样在异常退出事件中不会发生内存泄漏 2、常用方法:
CleanupStack::PushL() CleanupStack::Pop() CleanupStack::PopAndDestroy() 使用 __UHEAP_MARK 和 __UHEAP_MARKEND 宏来发现内存是否泄漏 2018/12/30
24
/*static*/ CFoo* CFoo::NewLC(TInt aVal) {
3、举例: /*static*/ CFoo* CFoo::NewLC(TInt aVal) { CFoo*self = new(ELeave) CFoo(aVal); // 第一阶段构造 CleanupStack::PushL(self); self->ConstructL(aVal); // 第二阶段构造 return self; } /*static*/ CFoo* CFoo::NewL(TInt aVal) { CFoo* self = CFoo::NewLC(aVal); CleanupStack::Pop(this); return self; } 2018/12/30
25
1、Symbian OS 的字符串被称为描述符;
八、描述符 1、Symbian OS 的字符串被称为描述符; 2、Symbian OS描述符不同于标准C++的字符串,Java的字符串或者MFC的Cstring,也不同于C的字符串; 3、它们的内存分配和释放必须由程序员来管理。 4、 Symbian OS的描述符可以包括文本和二进制数据 5、不能自动动态的扩展它们所引用的数据区,如果调用 某个方法使得要存储的数据大于可用空间就会导致系统 错误(panic) 2018/12/30
26
6、可以是窄(8位)的, 宽 (16bit)的或者为字符宽度无关的 (即16位,Symbian OS设置基于Unicode构建的)
7、被构建成支持unicode字符集,即缺省使用宽(16-bit) 字符 描述符类的字符宽度可以从名称中识别出来, 类名以8 结尾的描述符 (例如TPtr8)使用窄 (8位) 字符串 类名以16 结尾的描述符(例如TPtr16)处理16位字符串 8、TDesC 是所有描述符的基类,目前有六个描述符派生类 (TPtrC, TPtr, TBufC, TBuf, HBufC 和 RBuf) 9、描述符有两种基本结构 指针描述符 – 描述符拥有一个指针,该指针指向了其他某处存储字符串的地址 缓冲区描述符 – 字符串构成了描述符的一部分 2018/12/30
27
示例 2018/12/30
28
八、真机移植 Symbian OS 模拟器 1、Symbian 模拟器具有进程和线程调度,它跟真的Symbian OS手机硬件上的工作几乎是相同的 2、但是,也有一些区别 例如: 真机的内存模型与模拟器上的就有区别 底层硬件是不同的 不可能在模拟器和真机上使用相同的设备驱动器和硬件抽象层代码 因为这个原因 模拟器不能用于低级编程,例如编写设备驱动器 2018/12/30
29
移植到手机 1、为了构建Symbian OS程序,需要文件: 组件描述文件 (bld.inf) ——位于group文件夹
项目定义文件 (projectname.mmp) ) ——位于group文件夹 打包文件projectname.pkg ) ——位于sis文件夹 2、在模拟环境下设置编译方式带GCCE功能; 3、在模拟环境下修改group文件夹下bld.inf; /*注释部分,不被执行*/ PRJ_PLATFORMS ;平台说明 WINSCW GCCE PRJ_EXPORTS ; 列举一系列要从项目目录复制到另一个目录的文件 ;通常是 \epoc32 下面的目录 PRJ_MMPFILES ; 说明有哪些定义文件(MMP文件) project.mmp 2018/12/30
30
4、检查sis文件夹下打包文件(.pkg)路径是否正确 ;
移植到手机 4、检查sis文件夹下打包文件(.pkg)路径是否正确 ; ; helloworldbasic_gcce.pkg "..\..\..\epoc32\release\gcce\urel\HelloWorldBasic.exe" -"!:\sys\bin\HelloWorldBasic.exe" { "..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.rsc" "..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.r09" "..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.r31" "..\..\..\epoc32\data\z\resource\apps\HelloWorldBasic.r32" } 2018/12/30
31
5、编译、连连,重新生成打包文件*.pkg ;
6、在DOS下输入打包命令,主要如下: …>group>bldmake bldfiles …>group>abld build gcce urel …>group>cd. …>cd sis …>sis>makesis project.pkg 结果生成 project.sis (SIS 文件包含Symbian OS软件安装器安装一个应用程序到手机上所需要的所有信息) 7 、数字签名 symbian 第三版严格要求移植到手机的安装文件需要认证签名,需求不同,签名规格不同,签名后安装文件project.sis名称变为project.sisx 8、签名后的安装文件project.sisx拷贝到手机,直接安装即可运行。 2018/12/30
32
Thank you! 2018/12/30
Similar presentations