本版版主招募中

 
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-12 12:53  资料  个人空间  短消息  加为好友 
  文章作者:无双:
  原发处:loveunix.net
  欢迎转载,但是保留原作者与发表网站
  保留版权声明


  symbian是智能手机中的操作系统
  在目前手机操作系统的争夺中,Symbian市场占有率达到了70%,是当之无愧的老大,而微软的
  windowsmobile和其他操作系统一共只有30%的份额。
  
  而当前 最有潜力的市场就是智能手机市场 无论是开发还是其它方面
  
  所以 与其学会vc 让别人挑三捡四 一个月7800的工资打发 跟民工差不多 还不如学习symbian
  一个月拿个78k 最不济也可以自己开发symbian上的共享软件谋生
  
  
  目前,全球主流手机操作系统争夺主要有三种:
   1.Symbian操作系统:按持股比例多少,由诺基亚、爱立信、索尼爱立信、松下、三星、西门子共6家厂商顺序组成的Symbian联盟把持。优点是价格适中,对手机要求较低,缺点是开发人员少。
   2.windows mobile操作系统:优点在于可以方便地和PC上的windows进行互通,开发人员多,但缺点是授权费最高,对手机要求也高。
   3.Linux:全球开放的系统,任何厂家和开发商均可使用,优点是价格最低,对手机要求最低,缺点也很明显,厂家各自为营,手机之间的互通性差
  
  
  
  symbian公司的历史与构成
  symbian是由手机界诺基亚、爱立信、moto、松下、三星、西门子五大巨头与pison联合起来 为了反对微软的进攻而成立的一个公司 开发自己的智能手机操作系统
  后面由于其它变化 moto减少持股 同时pison离开 索爱加入 但是仍是这几家大公司持股
  
  当symbian成立后 ms也推出了smartphone操作系统 准备进攻移动手机市场 但现在以失败告终
  而symbian随着手机的发展得到了越来越多的市场
  
UIQ:UIQ是在symbian之上工作的一层包装 它对界面进行了包装 同时增加了一些常用的应用程序
现在索爱的p800,p910就是使用uiq
下面是uiq与symbian的关系
user posted image

但是具体来说 界面包装并没有改变太多 只是为了方便重定义了自己的图形类代替symbian中相同功能的类
相当于普通操作系统上的theme(主题)一样 你可以选择使用这个theme 并在它之上开发
theme只是进行了简单包装并改变了显示方式

顶部
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-12 12:58  资料  个人空间  短消息  加为好友 
原创:symbian
发表于loveunix.net

转载请保留作者与原出处

 安装
  
  这里介绍的是UIQ 也就是索爱P800系列的开发
  
  所以可以先从网上下载UIQ的安装文件 及安装vc6
  .net不合适
  
  当然如果有钱 那可以买codewarrior 这是支持最好的
  
  具体的安装 下载后直接点安装就可以了
  
  安装在c:盘c:\symbian
  
  安装到其它盘可能会有问题

symbian有两类分支 一类是nokia的s系列 如s60,s80,s90,另一类是索爱的uiq
这两个只是界面库的不同
它们在symbian的基础上加上自己的界面库 这个库只是附加的 你当然可以使用symbian的api来画界面 但是使用uiq或是s系列的接口 然后运行在对应的手机上
视觉效果会更好 (索爱的手机视图与诺基亚的界面效果是有很大不同的)
具体的不同后面会再补充


顶部
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-12 13:03  资料  个人空间  短消息  加为好友 
  
  作者:无双
  原发于www.loveunix.net
转载保留作者与原出处 保留版权声明
  
  随着.com 与java后 移动开发将会是下一轮开发中的主流技术
  当前pc的软件已经足够多 要完成相同功能的软件 你最少可以找到十个不同的厂家的实现
  但是在移动领域 你想实现某个功能 基本上找不到相关的好用的软件 所以在这里开发 你的市场机会会更大 并且竞争对手会更少
  
  所以 移动开发将会是更有前途的行业
  而symbian 以自己70%的市场占有量 更应该是这个开发的首选
  
  symbian开发介绍:
  symbian操作系统与普通pc的不同是:
  symbian上内存不够多 ,并且cpu速度慢,所以开发的话需要考虑到节省内存的原则 另外就是分配内存失败时的处理 在这点pc基本上不用考虑 因为有真实内存加上虚拟内存 够用的
  symbian操作系统可能运行好几个月 但是你的程序随时可能因为异常而退出 退出时释放程序使用的内存及其它相关资源就相当重要
  
界面开发最简单的方法是使用c++ 把相关的图形操作使用类来封装,所以symbian的sdk以c++ 类库形式提供 如果你还是使用c 那还是赶紧学习c++

由于symbian运行的环境有限,所以为了提高性能减少资源使用 symbian对标准c++进行了一定的修改,其中最明显的是去掉了异常处理机制

另一个就是对模板进行了简化 当然模板方面在语言开发中不会有不同 只是修改了它的实现 这个可以不用管 只是像c++中的模板一样使用好了

symbian在语言级不支持异常,但是以库与宏的形式来提供对导常的支持
throw 对应于 User::Leave或是leave相关函数
try{}catch(...){}对于于TRAP和TRAPD宏 TRAPD宏与TRAP只是增加了变量定义过程 这两个没有区别

另外 由于资源有限,所以有些程序可能因为不正常的使用资源而死掉 或是因为资源使用完而无法正常执行
这时 虽然可以自己增加错误处理过程 但是这样的过程太多了 如内存分配 每次分配完 都要检查是不是成功 没有成功就释放资源程序退出 这样代码量就很大 而在实时系统中 需要的是代码少而精
所以 symbian提供了cleanupstack(清除堆栈)机制
当你申请了资源后 把它Push到cleanupstack中 那后面如果某个申请失败了 可以直接调用User::Leave退出程序 操作系统会自动帮你释放你申请的资源 这样代码量就减少
如果已经成功的使用完资源了 需要自己释放 那就调用PopAndDestroy手动释放它
  
为了保证程序退出时用户申请的资源全部释放(主要是内存) 所以symbian同时提供了heap marking机制,程序开始时标记当前堆信息 退出时检查并释放没有释放的堆
  
  总之就是symbian开发中需要自己处理下面的事情:
   trap harness,cleanup stack,leave,heap marking


其实跟c++比起来 symbian对释放资源的操作通过cleanupstack进行了支持
只是需要自己手动的把资源放到cleanupstack中
这样可以认为是c++的手动管理资源与java的自动资源管理的一个折中

顶部
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-12 13:07  资料  个人空间  短消息  加为好友 
原来发的组织不好 过几天叫版主删除

顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5139
帖子 10006
活跃指数 32
LU金币 2596 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-10-12 13:15  资料  个人空间  短消息  加为好友 
偶在 palm 上和 pocket pc 上做过两个小程序~ symbian 还没完过

觉得还是基础最最重要,搞好了c c++ 基础,引伸到其他语言,平台都不需要费很大心思

向 symbian 学习 tongue.gif

顶部
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-12 20:19  资料  个人空间  短消息  加为好友 
语言都差不多的 重要的是使用

当然基础好了后 学习其它语言会更容易

还有 就是有两种基本的编程 :服务器编程与界面编程 这两个都做过后 其它的都可以触类旁通


symbian开发教程
作者:symbian
原发于loveunix.net
保留版权
转载请注明出处

第一个控制台下的hello world程序
很多语言都是从hello world 开始 学习symbian也不例外 下面从一个简单的hello world程序开始 介绍symbian的特点
CODE


//hellotext.cpp
#include <e32base.h>
#include <e32cons.h>

LOCAL_D CConsoleBase* gConsole;

//  Real main function
void MainL()
{
  TBuf<12>    helloWorld(_L("hello"));
  helloWorld.Append(_L("World"));
  gConsole->Printf(helloWorld);
// 可以把上面三句改成gConsole->Printf(_L"hello world");

}

//  Console harness
void ConsoleMainL()
{
  gConsole    = Console::NewL(_L("Hello Text"),
          TSize(KConsFullScreen,KConsFullScreen));
  CleanupStack::PushL(gConsole);
  MainL();
  User::After(5000000);
  CleanupStack::PopAndDestroy(gConsole);
}

GLDEF_C TInt    E32Main()
{
  __UHEAP_MARK;
  CTrapCleanup* cleanupStack  = CTrapCleanup::New();
  TRAPD(error,ConsoleMainL());
  __ASSERT_ALWAYS(!error,User::Panic(_L("SCMP"),error));
  delete cleanupStack;
  __UHEAP_MARKEND;
  return 0;
}


把上面的代码放到hellotext.cpp文件中

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-14 16:12  资料  个人空间  短消息  加为好友 
作者;无双
原发于 loveunix.net
保留版权 转载注明出处与原作者

编译与运行


symbian的编译要求比较奇怪
它需要一个bld.inf文件与一个mmp文件
bld.inf声明build的相关信息 通常只包括这次build会引用到的mmp文件
.mmp文件保存工程与makefile相关的信息 用于具体的build过程 它也叫makmakefile project ,也就是创建makefile的文件

bld.inf的文件名是固定的
.mmp文件的文件名则根据不同的工程而起不同的名字

下面是hellotext工程中这两个文件的内容
CODE

// &nbsp;BLD.INF
PRJ_MMPFILES
hellotext.mmp


CODE

//  hellotext.mmp
TARGET      HelloText.exe
TARGETTYPE  exe
SOURCEPATH  .
UID         0
SOURCE      hellotext.cpp
USERINCLUDE .
SYSTEMINCLUDE   \epoc32\include
LIBRARY     euser.lib


把上面两个文件保存到与hellotext.cpp相同的目录下
编译过程:

1 打开一个dos窗口
2 cd 到hellotext.cpp所在目录
3 运行下面命令
bldmake bldfiles
abld build wins udeb

运行完后 你就可以到
epoc/release/wins/udeb目录下查找hellotext.exe文件

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-14 16:28  资料  个人空间  短消息  加为好友 
作者:无双
原发于loveunix.net
保留版权,转载注明出处

// &nbsp;BLD.INF
PRJ_MMPFILES
hellotext.mmp
bld.inf只是声明这个build需要调用hellotext.mmp模块

CODE
// hellotext.mmp
TARGET HelloText.exe 生成的应用程序名是hellotext.exe
TARGETTYPE exe 生成的应用程序类型是exe类型,在symbian上可运行的程序类型有exe与app,另外还支持生成其它类型文件,如dll
SOURCEPATH . 在哪里查找源文件 这里指示是在当前目录下
UID 0 对exe程序不需要指定,这里写0
SOURCE hellotext.cpp 生成应用程序需要的源文件,这里是hellotext.cpp 可以有多个source 一直照这样的格式写就可以
USERINCLUDE . 用户自定义的头文件在哪里查找 这里是当前目录
SYSTEMINCLUDE \epoc32\include 系统头文件在哪里查找 一般都是这个值
LIBRARY euser.lib 需要链接的库 这是euser.lib

symbian的开发环境是使用perl开发的
所以需要有一个确定的文件名声明工程内容 这就是bld.inf
bldmake编译时先读bld.inf 看需要哪个文件指导编译过程
然后对mmp文件进行转换,生成makefile及其它相关的编译规则文件 同时在当前目录下生成abld.bat文件
后面就是使用abld进行具体编译
bld.inf意义就是 build info.编译信息
mmp文件就是 makmake file
bldmake 就是build make info


bldmake bldfiles 创建build files
abld build wins udeb 创建win simulator unicode debug 版本

另外可能用的其它两个命令是
bldmake clean 清除生成的build file,这在改变mmp文件后应该做
abld reallyclean 清除生成的目标文件(.o) 这在改变源文件内容后使用

顶部
[广告] 记录自己的思想火花,留住每日的技术积累,尽在拥有属于自己独立域名的博客。
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-14 16:51  资料  个人空间  短消息  加为好友 
作者:无双<br>
原发于loveunix.net<br>
保留版权 转载注明作者与出处<br>
<br>
symbian 模拟器样子<br>
<br>
在命令行下输入epoc得到<br>
<br>
如果没钱买智能手机 如p910 那可以拿这个来体会一下效果<br>
<br>
<img src="http://www.yipton.demon.co.uk/scap/images/scap.jpg"> <img src="http://www.yipton.demon.co.uk/scap/images/scap-1.jpg">
<br>
<pre>
刚才编译好的程序的运行

运行epoc/release/wins/udeb/hellotext.exe 看到
没有抓图工具 无法上传



代码说明


因为手机上没有dos或是xterm窗口,所以需要声明一个console类,
打开一个控制台窗口
LOCAL_D CConsoleBase* gConsole;

// Real main function
void MainL()
{
控制台打印
gConsole->Printf(_L"hello world");

}

// Console harness
void ConsoleMainL()
{
NewL类似标准c中的new 由于symbian中没有异常,
使用leave trapd代替标准c++中throw catch,
所以如果函数可能会leave的话 函数名后会加上一个L
gConsole = Console::NewL(_L("Hello Text"),
TSize(KConsFullScreen,KConsFullScreen));
symbian中为了避免资源泻漏 使用cleanupstack把需要释放的内容放到cleanupstack中,
当程序非法退出时 symbian操作系统会自动通过cleanupstack来对资源进行释放
保证资源的释放放是重要的
因为symbian可用的资源并不多 内存现在最多也就16M
而它可能一直运行好几个月(想看如果你不常关机的话)
CleanupStack::PushL(gConsole);

调用自己的函数
MainL();

停止5秒 让你看到屏幕显示
User::After(5000000);

手动释放刚才申请的资源
CleanupStack::PopAndDestroy(gConsole);
}

symbian中exe程序的入口定义如下GLDEF_C TInt E32Main
而不是标准C中的的main
可以认为symbian自己定义了main函数,
然后在里面进行自己的初始化
初始化完后再调用E32main
(在psos下开发时也是这样 psos的入口函数是root 在其它实时系统开发与普通系统不同
因为可能需要特殊的初始化 )

GLDEF_C TInt E32Main()
{
__UHEAP_MARK;定义堆保护 保证程序退出时会释放资源

创建清除堆栈类
CTrapCleanup* cleanupStack = CTrapCleanup::New();
TRAPD(error,ConsoleMainL()); 这个相当于标准c++中的catch(...)
__ASSERT_ALWAYS(!error,User::Panic(_L("SCMP"),error));
delete cleanupStack;

__UHEAP_MARKEND; 堆保护完成 在这里释放掉所有内存
return 0;
}
</pre>

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



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

结合上面的代码看symbian提供的机制
Leave , trap,cleanupstack ,heapmarking 都存在了

这是一个典型的symbian程序都会使用到的功能



函数是不是会Leave 这个在symbian中是以函数名的形式提供
函数名后面是L的表示它会Leave 函数名后面是LC的表示它会Leave,并且已经把指针push到cleanupstack中了

leave的情况:
是不是任何情况都会Leave呢
当然不是 只有资源申请失败或是操作失败时时会Leave 在系统库提供的函数是这样的

一般它也会提供不Leave的相同功能的函数
如Defined in TDesC8: 看TDesc8的类说明
Alloc(), AllocL(), AllocLC(), Compare(), CompareC(), CompareF(), Find(), Find(), FindC(), FindC(), FindF(), FindF(), Left(), Length(), Locate(), LocateF(), LocateReverse(), LocateReverseF(), Match(), MatchC(), MatchF(), Mid(), Mid(), Ptr(), Right(), Size(), operator!=(), operator<(), operator<=(), operator==(), operator>(), operator>=(), operator[]()

这里提供了Alloc()和AllocL()
看它们的说明
Alloc()
HBufC8* Alloc() const;
Description
Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor's data.

Return value
HBufC8* A pointer to the new 8 bit heap descriptor, if creation is successful. NULL, if creation of the descriptor fails.




--------------------------------------------------------------------------------

AllocL()
HBufC8* AllocL() const;
Description
Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor's data.

The function leaves, if creation of the descriptor fails.

Return value
HBufC8* A pointer to the 8 bit heap descriptor, if creation is successful.



See also:
Creating a heap descriptor

AllocLC()
HBufC8* AllocLC() const;
Description
Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor's data

The function leaves, if creation of the descriptor fails.

Return value
HBufC8* A pointer to the 8 bit heap descriptor, if creation is successful. The pointer is also put onto the cleanup stack.


对其它函数也一样

可以根据自己的需要来调用带L或是不带L的函数

必然会有不带L的函数 可能有带L的相同功能函数





不要问我结果 我只研究过程与思路
无双客栈
顶部
carol
荣誉斑竹
Rank: 14Rank: 14Rank: 14Rank: 14
幻想懒王++


UID 1859
精华 66
积分 5139
帖子 10006
活跃指数 32
LU金币 2596 个
LU金条 0 个
阅读权限 200
注册 2003-11-7
 
发表于 2004-10-14 20:50  资料  个人空间  短消息  加为好友 
晕死,无双和symbian什么关系?

顶部
symbian
技术专家
Rank: 14Rank: 14Rank: 14Rank: 14



UID 26804
精华 1
积分 45
帖子 86
活跃指数 0
LU金币 5406 个
LU金条 0 个
阅读权限 200
注册 2004-10-9
 
发表于 2004-10-14 20:56  资料  个人空间  短消息  加为好友 
好朋友tongue.gif

顶部
 



当前时区 GMT+8, 现在时间是 2008-10-11 08:02
乐悠LoveUnix论坛-京ICP备05005823号

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

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