本版版主招募中

 
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-14 20:56  资料  个人空间  主页 短消息  加为好友 
朋友关系laugh.gif





不要问我结果 我只研究过程与思路
无双客栈
顶部
流氓无产者
LU天使
Rank: 4



UID 46
精华 1
积分 976
帖子 1947
活跃指数 0
LU金币 2012 个
LU金条 0 个
阅读权限 50
注册 2003-9-18
 
发表于 2004-10-14 21:28  资料  个人空间  短消息  加为好友 
carol师傅真是双竹一木到家拉
明显马甲的说





没得玩了
顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5139
帖子 10006
活跃指数 32
LU金币 2596 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-10-14 21:42  资料  个人空间  短消息  加为好友 
QUOTE(流氓无产者 @ 2004-10-14 21:28:08)
carol师傅真是双竹一木到家拉
明显马甲的说
[right][snapback]399388[/snapback][/right]

偶看不是~ 欧相信他们是朋友,至于是什么朋友。。。。嘿嘿

顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-21 18:03  资料  个人空间  主页 短消息  加为好友 
symbian开发教程

作者:无双
原发于loveunix.net

其实上面还有一个特殊的符号 那就是_L
在symbian中是使用描述符的概念,与普通c/c++程序中字符串的概念不一样
后面会介绍它

下面介绍symbian的系统结构

//=======================================================
//
// 第二部分:系统结构
//
//=======================================================
CODE


在symbian os上运行的四种软件
   应用程序
   服务
   引擎
   内核
symbian系统使用活动对象与客户-服务器对事件处理系统进行了优化
硬件资源:
   一个cpu,32位arm
   一个rom(只读存储器),里面有操作系统与内建的中间件和应用程序
   ROM盘被映射到z:盘,所有的文件都可以通过Z:盘访问。
   系统RAM.系统RAM用于两个方面,一是被当前活动的程序和系统核心使用,另一个是当成"C"盘的磁盘空间。这两个部分的大小是变化的,不可以保留某个的大小。由于RAM通常只有8MB到16MB,所以内存可能用完,因此经常出现内存越界错误或是(写文件时)磁盘已满错误
   IO设备,包括带数字笔输入的触摸屏,键盘,记忆卡(被当成D盘),rs232串口,红外口,蓝牙。
   电源,包括电池与外接电源

symbian os与pc系统的区别如下:
   资源限制:cpu太慢与太少内存
   没有硬盘,不能使用写到硬盘的虚拟内存,不能保证有足够的空间保存程序或是数据文件
   电源条件严格.


symbian软件环境如下:

server  |   server| Application|  Application | Application     Dll
       |         |            +--------------+-------------    boundary
       |         |            |              |
       |         |            |  Enghine     |  Engine
--------+---------+------------+--------------+--------------   Privilege
                                                               boundary
                   Kernel


kernel工作在高级别,管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口
其它应用程序工作在用户模式
上面如果理解普通操作系统如linux的话,那跟普通操作系统没有区别
应用程序是一个有用户界面的程序,在独立的进程中运行
这与普通操作系统也没有区别
服务是没有用户界面的程序.服务管理一个或多个资源,并提供api,让客户可以访问它的服务.服务的客户可以是一个程序或是其它服务.每个服务也运行在独立的进程空间中。
在symbian中,使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户/服务类型的。(微内核:P)
引擎是一个应用程序中操作数据而不是与用户交互的部分.通常你可以把一个程序分成引擎部分和一个GUI部分,多部symbian内带的程序都是这样做的。
一个应用程序引擎可以是一个独立的代码模块或是一个独立的dll,或是几个dll.
引擎和应用程序间的边界是模块或dll的边界。

所以在symbian中有四个组件类型与三个边界类型。dll或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。
权限边界对交叉引用比较费资源,但是保证系统对用户太程序隐藏内核与设备
进程边界是所有的交叉中最昂贵的,它们保证在ram中分开每个程序





不要问我结果 我只研究过程与思路
无双客栈
顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-24 18:32  资料  个人空间  主页 短消息  加为好友 
继续

作者;无双
原发:loveunix.net
保留版权 转载注明出处

CODE


可执行文件的格式
在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必须很短,并且不能做很多事情,因为它可能在任何时间出现,甚至在内核服务中。通常它只是通知设备产生了中断并设置一个标志,要求内核为第二阶段的处理运行一个延迟的函数调用(delayed function call DFC)
   在方便的时候内核调度DFC.DFC可以使用多数的核心api,通常只是工作了后向用户线程通知io操作已经完成

定时器
`   内核支持真机上64hz的时钟与模拟器上10hz的时钟
   时钟中断是最高优先级中断,它可以通过User::After或是RTime::After访问。时钟中断在关机时停止,所以如果你请求5s后的定时操作,然后跑2s,关机,再开机时它也要等3s
   内核同时支持日期/时间时钟,你可以使用User::At或是RTime::At。这个定时器很准确。在关机时,如果时间到了,那它会开机,这对闹钟很合适。

内存
   symbian使用内存管理单元(memory management unit MMU)管理内存
   ROM被映射到z:盘,被映射到一个固定的地址。
   物理RAM被MMU分在4k的页,每个物理页可以用于:
       用户进程的虚地址空间。
       内核服务的虚地址空间
       ram盘,盘符是c:,ram盘只可通过文件服务进程访问
       如果dll不在rom中,那它被读到ram,dll被读到ram里面后页面标记为只读只读的。
       MMU的页面转换表.如果想理解的话学习一下操作系统原理
       自由页表






不要问我结果 我只研究过程与思路
无双客栈
顶部
OMAP
LU新生
Rank: 1



UID 27197
精华 0
积分 1
帖子 2
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2004-10-25
 
发表于 2004-10-25 18:08  资料  个人空间  短消息  加为好友 
看完这个帖子,我注册了。

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-25 20:18  资料  个人空间  主页 短消息  加为好友 
tongue.gif

symbian现在的市场占有量很高

另外nokia正在准备在国内推广symbian

我觉得做windows spartphone的前途比不上symbian





不要问我结果 我只研究过程与思路
无双客栈
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-25 20:41  资料  个人空间  主页 短消息  加为好友 
作者:无双
原发于loveunix.net

保留版权
转载保留出处

第一部分总结

上面介绍了基本的入门程序与symbian的结构

从基本的入门程序中可以看到一个程序的基本结构
那就是从
E32main开始
使用cleanupstack保护要执行的代码

相对于c++而言 语言级不支持throw 和catch,所以定义了函数User::Leave与宏trap保护 并且使用cleanupstack保证程序退出时资源的正确释放

第二部分介绍了symbian的结构与设备特点 后面会继续介绍

另外nokia的ng 也是使用symbian操作系统 使用的是s60系统
后面会介绍到它的不同

如果高兴的话 可以买个s60回来 自己给它写游戏laugh.gif





不要问我结果 我只研究过程与思路
无双客栈
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-26 13:07  资料  个人空间  主页 短消息  加为好友 
本文并不是那种五小时symbian教程或是一天之内学会的

所以会比较详细的写出symbian开发中的内容






不要问我结果 我只研究过程与思路
无双客栈
顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-26 21:17  资料  个人空间  主页 短消息  加为好友 
symbian相关学习的代码
http://www.symbian.com/books/scmp/scmp-source.html

安装uiq sdk(最新版是2.1 可以从www.uiq.com免费下载)后
下载它们 解压到一个目录

然后在有bld.inf的目录下开始执行

bldmake bldfiles
abld build wins udeb

(这些命令的语法已经在上面说明过一次)
wins表示是创建windows模拟器 对应的还有armi 结构 这是表示生成真机上 可执行文件
udeb表示是unicode的debug版 对应的有urel 表示unicode的release版

另外
上面是symbian mobile:c++ program的例子 在前一页提供一个链接可以下载第一章 可以拿来看看






不要问我结果 我只研究过程与思路
无双客栈
顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-26 21:20  资料  个人空间  主页 短消息  加为好友 
作者:无双
发表于loveunix.net
版权保留
转载注明作者与出处


//==============================================
// 可执行文件格式
//==============================================
可执行文件的格式
在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文件名为参数传入。





不要问我结果 我只研究过程与思路
无双客栈
顶部
无双
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
天才猪



UID 4
精华 84
积分 5863
帖子 11390
活跃指数 0
LU金币 4248 个
LU金条 0 个
阅读权限 200
注册 2003-9-16
来自 杭州
 
发表于 2004-10-26 21:25  资料  个人空间  主页 短消息  加为好友 
在syjmbian中可以在rom执行

并且dll也算可执行程序

这样看起来确实是比较奇怪

但是
symbian是一个手机操作系统 资源不是很多

使用dll 只需要在一个线程中执行

而线程的开销比进程少的多

无论是在内存(每个进程都有独立的内存,而线程共享进程的内存与资源) 还是进程间通信的方面 线程的开销都比进程少的多

在rom中可执行代码也是因为手机内存很少(还没有达到128M:D)

在rom中也可以执行引起了symbian与其它系统的两个不同
第一 就是dll不可以有可写的静态变量 因为如果dll在rom上 它不需要读到内存 所以无法改写
第二 就是rom上exe文件执行时 只需要把可写的变量放到ram中 这也表示可以在exe中使用静态可写变量








不要问我结果 我只研究过程与思路
无双客栈
顶部
 



当前时区 GMT+8, 现在时间是 2008-9-8 19:57
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.057796 second(s), 7 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver