微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > Symbian 入门

Symbian 入门

时间:09-12 来源:互联网 点击:

——–+———+————+————–+————– Privilege

boundary

Kernel

kernel工作在高级别,管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口

其它应用程序工作在用户模式

上面如果理解普通操作系统如linux的话,那跟普通操作系统没有区别

应用程序是一个有用户界面的程序,在独立的进程中运行

这与普通操作系统也没有区别

服务是没有用户界面的程序.服务管理一个或多个资源,并提供api,让客户可以访问它的服务.服务的客户可以是一个程序或是其它服务.每个服

务也运行在独立的进程空间中。

在symbian中,使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户/服务类型的。(微内

核 )

引擎是一个应用程序中操作数据而不是与用户交互的部分.通常你可以把一个程序分成引擎部分和一个GUI部分,多部symbian内带的程序都是这

样做的。

一个应用程序引擎可以是一个独立的代码模块或是一个独立的dll,或是几个dll.

引擎和应用程序间的边界是模块或dll的边界。

所以在symbian中有四个组件类型与三个边界类型。dll或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。

权限边界对交叉引用比较费资源,但是保证系统对用户太程序隐藏内核与设备

进程边界是所有的交叉中最昂贵的,它们保证在ram中分开每个程序

可执行文件的格式

在symbian中有两种类型的可执行文件:

exe,每个程序都有一个主入口E32main()(看上面的例子),它在独立的进程中运行

dll,提供多个入口,由系统或是已存在的线程(进程)调用

有两种类型的dll,

共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。

多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它

们从与dll相关的类继承,并通常只有在程序需要它们时才读入。

从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别

但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll

代码执行

如果程序代码在rom上,则直接执行,不然需要读到ram中(与普通操作系统不同,普通操作系统都需要读到ram中

不能直接在硬盘上执行)

可执行代码包括三种类型的二进制数据:

程序代码

只读静态数据

可写静态数据

在symbian中对待.exe与.dll是不同的

由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存

而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。

在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload.

在rom上的dll像rom上的exe一样直接在rom上执行

为了对dll的大小进行优化,symbbian进行如下操作;

多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过

名字link.也就是说在.dll中没有名字访问办法,在.lib(引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每

创建一个dll都会创建一个用户引导链接的同名.lib)中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引

如果dll被读到ram,那重定位信息(把dll

load到什么地址)也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到ram中执行的程序.(rom中执行的多是

oem厂家,所以普通开发者多不用关心)

多数应用程序有自己有exe来创建进程,其它的程序使用动态库(DL)L的形式,在主服务线程中调用自己的线程

多数gui程序都是多态(polymorphic)dll,有一个主入口点NewApplication(),这个入口点创建并返回一个继承自CEikAppication的对象.这样的

程序被apprun.exe调用,app文件名为参数传入。

电源管理

电源必须高效使用

在系统已经关机时,确定程序仍然可以运行。如闹钤,关机后,到时时仍然可以开机

电源突然关掉时,关键数据应该可以保存

设备驱动

虽然一般不会了解它,但是理解一下还是很有用的

设备驱动工作在两个级别

第一个是中断服务程序(ISR),ISR必须很短,并且不能做很多事情,因为它可能在任何时间出现,甚至在内核服务中。通常它只是通知设备产

生了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top