360 likes | 565 Views
手机应用开发 如何 启动 Symbian程序 Symbian 系统结构. 王旭. 启动 symbian 程序要准备什么. 从两个阶段阶段看,分为开发和启动 开发需要: SDK 包和文本编辑器 集成开发环境 Cabide.vs 启动需要: 模拟器 手机. 启动 Symbian 程序的步骤. 1 ,根据手机型号选择 sdk 包, sdk 向下兼容 2 ,根据需要选择合适的程序类型( exe 、 app 、 dll ) 3 ,选择运行的环境(模拟器,手机) 选择运行环境的依据:编译程序 / 模拟调试 / 真机调试 / 发布软件
E N D
手机应用开发如何启动Symbian程序 Symbian系统结构 王旭
启动symbian程序要准备什么 从两个阶段阶段看,分为开发和启动 • 开发需要: SDK包和文本编辑器 集成开发环境 Cabide.vs • 启动需要: 模拟器 手机
启动Symbian程序的步骤 • 1,根据手机型号选择sdk包,sdk向下兼容 • 2,根据需要选择合适的程序类型(exe、app、dll) • 3,选择运行的环境(模拟器,手机) 选择运行环境的依据:编译程序/模拟调试/真机调试/发布软件 • 4,选择uid, • 5,编写程序 • 6,编译程序 • 7,发布程序 制作安装包,先写好pkg文件,用makesis工具产生,最讨厌的就是程序的uid和平台id • 8,通过数据线、蓝牙、红外把安装包传递到手机上安装并运行 可笑的版权保护程序,sis,jar后缀的文件不能直接在手机间发送。 • 注意;V3版的手机更加繁琐,还需要用sis文件产生sisx,强制程序通过nokia的应用程序认证。
UID的使用 网站申请UID:https://www.symbiansigned.com/app/page/uid/requestType.jsp
Symbian系统结构介绍 • 硬件资源 • 软件基础 • 进程,线程,上下文切换 • 进程,线程的内存使用 • 可执行程序 • 内核 • 内存分配 • 文件 • 事件处理 • 活动对象 • 多任务处理和抢占 • 服务器 • 电源管理 • 设备驱动程序 • 定时器
硬件资源 • CPU • ROM • RAM • I/O设备
软件基础-组件和边界1 进程边界 进程边界 进程边界 进程边界 应用程序 应用程序 模块DLL 边界 服务器 服务器 应用程序 引擎 引擎 优先级 边界 内核
软件基础-组件和边界2 • 三种边界类型 优先级边界,进程边界,DLL边界 • 四种组件类型 应用程序、服务器、引擎、内核 • 边界区分的说明 模块或DLL的边界比较松散,他存在的目的是通过模块化和封装来增强系统稳定性。优先级边界不太容易被突破,进程边界是天然存在,越界难度最大,他是通过隔离程序之间的RAM来增强系统完整性
进程,线程,上下文切换 • 进程是基本保护单元 • 线程是基本执行单元,线程是不可以完全隔离的。 • 线程间进行切换执行的过程称为上下文切换
进程,线程内存1 • Exe启动后首先创建带有单一主线程的新进程,这个进程也可以创建其他的线程。 • 进程地址空间包括几种内存区域: 系统范围的内存,ROM和已经载入的Dll 进程范围的内存,exe自己的代码区和数据区 每个线程的内存,线程的栈和默认堆。
进程,线程内存2 • 线程的栈是不能增长的,栈溢出会导致崩溃 • 堆可以自动增长。 • 所以栈只用来保存占用空间很小的自动变量。 • Symbian为了节约资源,规定在dll不可使用可写静态数据。
可执行程序1-分类 • 对cpu而言,一个程序就是一个指令序列,不过为了高效的管理软件开发和部署,我们将代码分组到方便使用的包里。Symbian使用的包和我们常见的windows系统相当类似,.exe拥有唯一主入口点E32Main()的程序,一旦启动就会创建一个新进程,在该进程的主线程里调用主入口点;动态链接库,即DLL,是具有多个入口点的程序代码库,系统把DLL载入当前线程的上下文中执行。这两种都属于可执行程序
可执行程序2-DLL类别 • DLL也分为两种,一种是共享库DLL,提供给其他程序使用的固定的API,另一种是多态DLL,实现抽象的API,如打印机驱动程序、套接字协议、各种应用程序,它们一般使用不是dll的后缀,如prn、prt、app,多态的dll通常只具有的那一入口点,和该类别相关联的程序通过这个入口点载入这个DLL代码运行。
可执行程序3-载入 • 可执行程序文件被执行前必须被载入,如果该文件被放置与ROM中,他就没有载入过程,可以被直接执行。可执行程序不在ROM中,则必须被载入RAM中,然后才执行。
可执行程序4-共享 • Symbian的可执行程序包含了三种数据:程序代码、只读静态数据、读/写静态数据。Exe程序不存在共享问题,exe一旦执行,就会被分配他自己的代码区、只读数据区和读写数据区,(如果exe位于ROM,则只分配读写数据区,不需分配代码区和只读数据区)。Dll会被共享,在RAM第一次载入DLL时,它被分配到特定的地址,当第二个线程访问同样的Dll时,不会发生再次装载,只是附加已经存在的拷贝。系统会维护一个DLL引用记数,直到没有任何线程使用它的时候把对应的DLL卸载。
E32与内核 • Symbianos的最基本构件就是E32。 • E32包括了内核和用户库两大部分 • 内核具有绝对的优先级,用户库是所有用户模式代码的最基层,任何对内核的访问控制都会通过用户库提供的API完成操作。 • 内核本身分为内核执行程序和内核服务器。内核服务器是整个OS里的主线程,总是优先执行,它在整个系统级拥有最高优先级,它分配和控制整个系统里使用的内核端资源。它是单线程,按顺序,非抢占的处理用户程序的请求。内核执行程序则是以用户模式执行内核资源操作的代码,它会被具有更高优先级的其它用户模式线程或者内核服务器抢占
内存分配 RAM ROM 图例 内核 进程1 DLL 磁盘 自由 映射表
内存分配-说明 • 系统内存由内存管理单元(MMU)控制 • MMU把RAM分为4Kb大小物理页面单元进行管理 • 每个物理页面分为几种不同的分配 用户进程的虚拟地址空间、内核服务器进程的虚拟地址空间、磁盘文件使用的空间、dll使用的空间、内存管理的映射表空间、未分配的自由空间
为什么不让DLL使用可写静态数据 • 使用静态数据需要在ram分配内存空间,如前面所说,内存块按照4KB计算,假设每个DLL只使用10个字节的可写静态数据,系统被用到50个DLL,并发20个应用程序,可写程序占用空间为4KB×20应用×10BYTE×50个DLL= 40M,是个可怕的数据。。。。
文件系统 • 手机看能看到的文件系统为四个磁盘 C:、D:、E:、Z: C是RAM区磁盘,可读写 D是系统缓存,系统使用,只读 E是内存扩展卡 Z是ROM区,只读
事件处理 • Symbian提供了GUI系统,我们使用GUI进行编程就会把重点放在对用户的事件响应上。
活动对象 • 除了多线程完成多任务操作以外,symbian还提供了活动对象来执行多任务操作,每个线程的单一活动规划器与多个活动协作在一个线程里完成多任务操作。 • 活动对象采用非抢占模式进行多任务处理
活动规划器原则 活动规划器按照以下规则控制活动对象的运行: 当前如果只有一个对象可以运行,则运行该对象, 如果有多个对象,则选择最高优先级的对象运行 如果没有运行对象,则等待下一个事件。
多线程使用与活动对象使用 • 都用于完成多任务操作,但是应用场景不同,可以互为补充 • 尽量把一个需要长时间运行的任务分解为可以短时间内完成的任务链,并使用活动对象完成 • 确实需要长时间运行的任务使用多线程方式进行操作。
服务器 • Symbianos中,大部分多线程编程都使用客户-服务器框架 • 服务器处理相关资源,客户端使用服务器执行资源提供的服务。 • 这种模式可能碰到的问题 多线程编程的复杂性 需要进行进程越界传递信息的难度高
解决客户-服务器的困难 Symbian提供几种方法来降低客户服务器框架可能碰到的问题 • 客户端接口 封装客户端-服务器的通信,是客户端不必知道这个框架的细节,就可以轻松使用 • 内核支持的消息传递 实现了客户端接口的服务器可以使用这种消息传递作为客户端到服务器传递并处理请求的主要方法。 • 内核支持的线程间读写 消息不能让客户端和服务器之间传递很多信息,通过这种线程间读写可以传递更多的信息。
电源管理 • 电源管理是PC系统与手机系统最大的差别之一,由于使用电池供电,要求symbian必须在功率较低的硬件上保持高效运作 • 要求系统有低功耗状态和激活状态,例如在关机状态保持定时器运转,在低功耗状态对来电或者短信产生反应 • 在电源意外中断情况下能够保存关键信息,当恢复供电后有可能热启动
设备驱动程序 • 屏幕,键盘,声音解码器,状态灯,串口,内存卡都是设备驱动程序来驱动的。 • 这些工作一般是symbian的oem厂家来完成,没有提供典型的用户可扩展性。
定时器 • 手机和pc模拟器上的定时器是不同的。 手机上ARM是64Hz定时中断,pc模拟器上是10Hz
其他信息 • 课程:手机应用开发 • 联系方法: 邮箱: wangxu@moabc.com MSN: xuwag@hotmail.com