LoveUnix » 编程开发 & Rational » symbian与uiq开发教程
让LU留住您的每

一天 让LU博客留住您的每一天
2004-10-12 12:53 symbian
  文章作者:无双:<br />  原发处:loveunix.net<br />  欢迎转载,但是保留原作者与发表网站<br />  保留版权声明<br /><br /><br />  symbian是智能手机中的操作系统<br />  在目前手机操作系统的争夺中,Symbian市场占有率达到了70%,是当之无愧的老大,而微软的<br />  windowsmobile和其他操作系统一共只有30%的份额。<br />  <br />  而当前 最有潜力的市场就是智能手机市场 无论是开发还是其它方面<br />  <br />  所以 与其学会vc 让别人挑三捡四 一个月7800的工资打发 跟民工差不多 还不如学习symbian<br />  一个月拿个78k 最不济也可以自己开发symbian上的共享软件谋生<br />  <br />  <br />  目前,全球主流手机操作系统争夺主要有三种:<br />   1.Symbian操作系统:按持股比例多少,由诺基亚、爱立信、索尼爱立信、松下、三星、西门子共6家厂商顺序组成的Symbian联盟把持。优点是价格适中,对手机要求较低,缺点是开发人员少。<br />   2.windows mobile操作系统:优点在于可以方便地和PC上的windows进行互通,开发人员多,但缺点是授权费最高,对手机要求也高。<br />   3.Linux:全球开放的系统,任何厂家和开发商均可使用,优点是价格最低,对手机要求最低,缺点也很明显,厂家各自为营,手机之间的互通性差<br />  <br />  <br />  <br />  symbian公司的历史与构成<br />  symbian是由手机界诺基亚、爱立信、moto、松下、三星、西门子五大巨头与pison联合起来 为了反对微软的进攻而成立的一个公司 开发自己的智能手机操作系统<br />  后面由于其它变化 moto减少持股 同时pison离开 索爱加入 但是仍是这几家大公司持股<br />  <br />  当symbian成立后 ms也推出了smartphone操作系统 准备进攻移动手机市场 但现在以失败告终<br />  而symbian随着手机的发展得到了越来越多的市场<br />  <br />UIQ:UIQ是在symbian之上工作的一层包装 它对界面进行了包装 同时增加了一些常用的应用程序 <br />现在索爱的p800,p910就是使用uiq<br />下面是uiq与symbian的关系<br /><img src='http://www.uiq.com/UIQ%202.1%20Product%20description%20for%20web/UIQ%202.1%20Product%20Description%20REV%201.00_files/image004.gif' border='0' alt='user posted image' /><br /><br />但是具体来说 界面包装并没有改变太多 只是为了方便重定义了自己的图形类代替symbian中相同功能的类<br />相当于普通操作系统上的theme(主题)一样 你可以选择使用这个theme 并在它之上开发<br />theme只是进行了简单包装并改变了显示方式

2004-10-12 12:58 symbian
原创:symbian<br />发表于loveunix.net<br /><br />转载请保留作者与原出处<br /><br /> 安装<br />  <br />  这里介绍的是UIQ 也就是索爱P800系列的开发<br />  <br />  所以可以先从网上下载UIQ的安装文件 及安装vc6<br />  .net不合适<br />  <br />  当然如果有钱 那可以买codewarrior 这是支持最好的<br />  <br />  具体的安装 下载后直接点安装就可以了<br />  <br />  安装在c:盘c:\symbian<br />  <br />  安装到其它盘可能会有问题<br /><br />symbian有两类分支 一类是nokia的s系列 如s60,s80,s90,另一类是索爱的uiq<br />这两个只是界面库的不同 <br />它们在symbian的基础上加上自己的界面库 这个库只是附加的 你当然可以使用symbian的api来画界面 但是使用uiq或是s系列的接口 然后运行在对应的手机上 <br />视觉效果会更好 (索爱的手机视图与诺基亚的界面效果是有很大不同的)<br />具体的不同后面会再补充<br /><br />

2004-10-12 13:03 symbian
  <br />  作者:无双<br />  原发于www.loveunix.net<br />转载保留作者与原出处 保留版权声明<br />  <br />  随着.com 与java后 移动开发将会是下一轮开发中的主流技术<br />  当前pc的软件已经足够多 要完成相同功能的软件 你最少可以找到十个不同的厂家的实现<br />  但是在移动领域 你想实现某个功能 基本上找不到相关的好用的软件 所以在这里开发 你的市场机会会更大 并且竞争对手会更少<br />  <br />  所以 移动开发将会是更有前途的行业<br />  而symbian 以自己70%的市场占有量 更应该是这个开发的首选<br />  <br />  symbian开发介绍:<br />  symbian操作系统与普通pc的不同是:<br />  symbian上内存不够多 ,并且cpu速度慢,所以开发的话需要考虑到节省内存的原则 另外就是分配内存失败时的处理 在这点pc基本上不用考虑 因为有真实内存加上虚拟内存 够用的<br />  symbian操作系统可能运行好几个月 但是你的程序随时可能因为异常而退出 退出时释放程序使用的内存及其它相关资源就相当重要<br />  <br />界面开发最简单的方法是使用c++ 把相关的图形操作使用类来封装,所以symbian的sdk以c++ 类库形式提供 如果你还是使用c 那还是赶紧学习c++<br /><br />由于symbian运行的环境有限,所以为了提高性能减少资源使用 symbian对标准c++进行了一定的修改,其中最明显的是去掉了异常处理机制 <br /><br />另一个就是对模板进行了简化 当然模板方面在语言开发中不会有不同 只是修改了它的实现 这个可以不用管 只是像c++中的模板一样使用好了<br /><br />symbian在语言级不支持异常,但是以库与宏的形式来提供对导常的支持 <br />throw 对应于 User::Leave或是leave相关函数<br />try{}catch(...){}对于于TRAP和TRAPD宏 TRAPD宏与TRAP只是增加了变量定义过程 这两个没有区别<br /><br />另外 由于资源有限,所以有些程序可能因为不正常的使用资源而死掉 或是因为资源使用完而无法正常执行<br />这时 虽然可以自己增加错误处理过程 但是这样的过程太多了 如内存分配 每次分配完 都要检查是不是成功 没有成功就释放资源程序退出 这样代码量就很大 而在实时系统中 需要的是代码少而精<br />所以 symbian提供了cleanupstack(清除堆栈)机制<br />当你申请了资源后 把它Push到cleanupstack中 那后面如果某个申请失败了 可以直接调用User::Leave退出程序 操作系统会自动帮你释放你申请的资源 这样代码量就减少<br />如果已经成功的使用完资源了 需要自己释放 那就调用PopAndDestroy手动释放它<br />  <br />为了保证程序退出时用户申请的资源全部释放(主要是内存) 所以symbian同时提供了heap marking机制,程序开始时标记当前堆信息 退出时检查并释放没有释放的堆<br />  <br />  总之就是symbian开发中需要自己处理下面的事情:<br />   trap harness,cleanup stack,leave,heap marking<br /><br /><br />其实跟c++比起来 symbian对释放资源的操作通过cleanupstack进行了支持 <br />只是需要自己手动的把资源放到cleanupstack中<br />这样可以认为是c++的手动管理资源与java的自动资源管理的一个折中

2004-10-12 13:07 symbian
原来发的组织不好 过几天叫版主删除

2004-10-12 13:15 carol
偶在 palm 上和 pocket pc 上做过两个小程序~ symbian 还没完过<br /><br />觉得还是基础最最重要,搞好了c c++ 基础,引伸到其他语言,平台都不需要费很大心思<br /><br />向 symbian 学习 <!--emo&:P--><img src='style_emoticons/default/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo-->

2004-10-12 20:19 symbian
语言都差不多的 重要的是使用<br /><br />当然基础好了后 学习其它语言会更容易 <br /><br />还有 就是有两种基本的编程 :服务器编程与界面编程 这两个都做过后 其它的都可以触类旁通<br /><br /><br />symbian开发教程<br />作者:symbian<br />原发于loveunix.net<br />保留版权<br />转载请注明出处<br /><br />第一个控制台下的hello world程序<br />很多语言都是从hello world 开始 学习symbian也不例外 下面从一个简单的hello world程序开始 介绍symbian的特点<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br /><br />//hellotext.cpp<br />#include &#60;e32base.h&#62;<br />#include &#60;e32cons.h&#62;<br /><br />LOCAL_D CConsoleBase* gConsole;<br /><br />// &nbsp;Real main function<br />void MainL&#40;&#41;<br />{<br /> &nbsp; TBuf&#60;12&#62; &nbsp; &nbsp;helloWorld&#40;_L&#40;&#34;hello&#34;&#41;&#41;;<br /> &nbsp; helloWorld.Append&#40;_L&#40;&#34;World&#34;&#41;&#41;;<br /> &nbsp; gConsole-&#62;Printf&#40;helloWorld&#41;;<br />// 可以把上面三句改成gConsole-&#62;Printf&#40;_L&#34;hello world&#34;&#41;;<br /><br />}<br /><br />// &nbsp;Console harness<br />void ConsoleMainL&#40;&#41;<br />{<br /> &nbsp; gConsole &nbsp; &nbsp;= Console&#58;&#58;NewL&#40;_L&#40;&#34;Hello Text&#34;&#41;,<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TSize&#40;KConsFullScreen,KConsFullScreen&#41;&#41;;<br /> &nbsp; CleanupStack&#58;&#58;PushL&#40;gConsole&#41;;<br /> &nbsp; MainL&#40;&#41;;<br /> &nbsp; User&#58;&#58;After&#40;5000000&#41;;<br /> &nbsp; CleanupStack&#58;&#58;PopAndDestroy&#40;gConsole&#41;;<br />}<br /><br />GLDEF_C TInt &nbsp; &nbsp;E32Main&#40;&#41;<br />{<br /> &nbsp; __UHEAP_MARK;<br /> &nbsp; CTrapCleanup* cleanupStack &nbsp;= CTrapCleanup&#58;&#58;New&#40;&#41;;<br /> &nbsp; TRAPD&#40;error,ConsoleMainL&#40;&#41;&#41;;<br /> &nbsp; __ASSERT_ALWAYS&#40;&#33;error,User&#58;&#58;Panic&#40;_L&#40;&#34;SCMP&#34;&#41;,error&#41;&#41;;<br /> &nbsp; delete cleanupStack;<br /> &nbsp; __UHEAP_MARKEND;<br /> &nbsp; return 0;<br />}<br /><!--c2--></div><!--ec2--><br /><br />把上面的代码放到hellotext.cpp文件中

2004-10-14 16:12 symbian
作者;无双<br />原发于 loveunix.net<br />保留版权 转载注明出处与原作者<br /><br />编译与运行<br /><br /><br />symbian的编译要求比较奇怪<br />它需要一个bld.inf文件与一个mmp文件<br />bld.inf声明build的相关信息 通常只包括这次build会引用到的mmp文件<br />.mmp文件保存工程与makefile相关的信息 用于具体的build过程 它也叫makmakefile project ,也就是创建makefile的文件<br /><br />bld.inf的文件名是固定的<br />.mmp文件的文件名则根据不同的工程而起不同的名字<br /><br />下面是hellotext工程中这两个文件的内容<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />// &amp;nbsp;BLD.INF<br />PRJ_MMPFILES<br />hellotext.mmp<br /><!--c2--></div><!--ec2--><br /><br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br />// &nbsp;hellotext.mmp<br />TARGET &nbsp; &nbsp; &nbsp;HelloText.exe<br />TARGETTYPE &nbsp;exe<br />SOURCEPATH &nbsp;.<br />UID &nbsp; &nbsp; &nbsp; &nbsp; 0<br />SOURCE &nbsp; &nbsp; &nbsp;hellotext.cpp<br />USERINCLUDE .<br />SYSTEMINCLUDE &nbsp; \epoc32\include<br />LIBRARY &nbsp; &nbsp; euser.lib<br /><!--c2--></div><!--ec2--><br /><br />把上面两个文件保存到与hellotext.cpp相同的目录下<br />编译过程:<br /><br />1 打开一个dos窗口<br />2 cd 到hellotext.cpp所在目录<br />3 运行下面命令<br />bldmake bldfiles<br />abld build wins udeb<br /><br />运行完后 你就可以到<br />epoc/release/wins/udeb目录下查找hellotext.exe文件

2004-10-14 16:28 symbian
作者:无双<br />原发于loveunix.net <br />保留版权,转载注明出处<br /><br />// &amp;nbsp;BLD.INF<br />PRJ_MMPFILES<br />hellotext.mmp<br />bld.inf只是声明这个build需要调用hellotext.mmp模块<br /><br />CODE<br />//  hellotext.mmp<br />TARGET      HelloText.exe   生成的应用程序名是hellotext.exe<br />TARGETTYPE  exe   生成的应用程序类型是exe类型,在symbian上可运行的程序类型有exe与app,另外还支持生成其它类型文件,如dll<br />SOURCEPATH  .    在哪里查找源文件 这里指示是在当前目录下<br />UID         0      对exe程序不需要指定,这里写0<br />SOURCE      hellotext.cpp 生成应用程序需要的源文件,这里是hellotext.cpp 可以有多个source 一直照这样的格式写就可以<br />USERINCLUDE .  用户自定义的头文件在哪里查找 这里是当前目录<br />SYSTEMINCLUDE   \epoc32\include  系统头文件在哪里查找 一般都是这个值<br />LIBRARY     euser.lib  需要链接的库 这是euser.lib<br /><br />symbian的开发环境是使用perl开发的 <br />所以需要有一个确定的文件名声明工程内容  这就是bld.inf<br />bldmake编译时先读bld.inf 看需要哪个文件指导编译过程 <br />然后对mmp文件进行转换,生成makefile及其它相关的编译规则文件 同时在当前目录下生成abld.bat文件<br />后面就是使用abld进行具体编译<br />bld.inf意义就是  build info.编译信息<br />mmp文件就是 makmake file<br />bldmake 就是build make info<br /><br /><br />bldmake bldfiles  创建build files<br />abld build wins udeb   创建win simulator unicode debug 版本<br /><br />另外可能用的其它两个命令是<br />bldmake clean  清除生成的build file,这在改变mmp文件后应该做<br />abld reallyclean  清除生成的目标文件(.o)  这在改变源文件内容后使用

2004-10-14 16:51 symbian
作者:无双&lt;br&gt;<br />原发于loveunix.net&lt;br&gt;<br />保留版权 转载注明作者与出处&lt;br&gt;<br />&lt;br&gt;<br />symbian 模拟器样子&lt;br&gt;<br />&lt;br&gt;<br />在命令行下输入epoc得到&lt;br&gt;<br />&lt;br&gt;<br />如果没钱买智能手机 如p910 那可以拿这个来体会一下效果&lt;br&gt;<br />&lt;br&gt;<br />&lt;img src=&quot;http://www.yipton.demon.co.uk/scap/images/scap.jpg&quot;&gt; &lt;img src=&quot;http://www.yipton.demon.co.uk/scap/images/scap-1.jpg&quot;&gt;<br />&lt;br&gt;<br />&lt;pre&gt;<br />刚才编译好的程序的运行<br /><br />运行epoc/release/wins/udeb/hellotext.exe 看到<br />没有抓图工具 无法上传<br /><br /><br /><br />代码说明<br /><br /><br />因为手机上没有dos或是xterm窗口,所以需要声明一个console类,<br />打开一个控制台窗口<br />LOCAL_D CConsoleBase* gConsole;<br /><br />//  Real main function<br />void MainL()<br />{<br />控制台打印 <br />  gConsole-&gt;Printf(_L&quot;hello world&quot;);<br /><br />}<br /><br />//  Console harness<br />void ConsoleMainL()<br />{<br />NewL类似标准c中的new 由于symbian中没有异常,<br />使用leave trapd代替标准c++中throw catch,<br />所以如果函数可能会leave的话 函数名后会加上一个L  <br />  gConsole    = Console::NewL(_L(&quot;Hello Text&quot;),<br />          TSize(KConsFullScreen,KConsFullScreen));<br />symbian中为了避免资源泻漏 使用cleanupstack把需要释放的内容放到cleanupstack中,<br />当程序非法退出时 symbian操作系统会自动通过cleanupstack来对资源进行释放 <br />保证资源的释放放是重要的 <br />因为symbian可用的资源并不多 内存现在最多也就16M <br />而它可能一直运行好几个月(想看如果你不常关机的话)<br />  CleanupStack::PushL(gConsole);<br /><br />调用自己的函数<br />  MainL();<br /><br />停止5秒 让你看到屏幕显示<br />  User::After(5000000);<br /><br />手动释放刚才申请的资源<br />  CleanupStack::PopAndDestroy(gConsole);<br />}<br /><br />symbian中exe程序的入口定义如下GLDEF_C TInt    E32Main <br />而不是标准C中的的main <br />可以认为symbian自己定义了main函数,<br />然后在里面进行自己的初始化 <br />初始化完后再调用E32main <br />(在psos下开发时也是这样 psos的入口函数是root 在其它实时系统开发与普通系统不同 <br />因为可能需要特殊的初始化 )<br /><br />GLDEF_C TInt    E32Main()<br />{<br />  __UHEAP_MARK;定义堆保护 保证程序退出时会释放资源<br /><br />创建清除堆栈类<br />  CTrapCleanup* cleanupStack  = CTrapCleanup::New();<br />  TRAPD(error,ConsoleMainL());  这个相当于标准c++中的catch(...)<br />  __ASSERT_ALWAYS(&#33;error,User::Panic(_L(&quot;SCMP&quot;),error));<br />  delete cleanupStack;<br /><br />  __UHEAP_MARKEND; 堆保护完成 在这里释放掉所有内存<br />  return 0;<br />}<br />&lt;/pre&gt;

2004-10-14 19:36 无双
作者:无双<br />原发于loveunix.net<br />保留版权 转载注明作者与出处<br /><br />结合上面的代码看symbian提供的机制<br />Leave , trap,cleanupstack ,heapmarking 都存在了<br /><br />这是一个典型的symbian程序都会使用到的功能<br /><br /><br /><br />函数是不是会Leave 这个在symbian中是以函数名的形式提供<br />函数名后面是L的表示它会Leave  函数名后面是LC的表示它会Leave,并且已经把指针push到cleanupstack中了<br /><br />leave的情况:<br />是不是任何情况都会Leave呢 <br />当然不是 只有资源申请失败或是操作失败时时会Leave 在系统库提供的函数是这样的<br /><br />一般它也会提供不Leave的相同功能的函数 <br />如Defined in TDesC8: 看TDesc8的类说明<br />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&#33;=(), operator&lt;(), operator&lt;=(), operator==(), operator&gt;(), operator&gt;=(), operator[]() <br /><br />这里提供了Alloc()和AllocL()<br />看它们的说明<br />Alloc()<br />HBufC8* Alloc() const;<br />Description<br />Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor&#39;s data.<br /><br />Return value<br />HBufC8*  A pointer to the new 8 bit heap descriptor, if creation is successful. NULL, if creation of the descriptor fails. <br /> <br /> <br /><br /><br />--------------------------------------------------------------------------------<br /><br />AllocL()<br />HBufC8* AllocL() const;<br />Description<br />Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor&#39;s data.<br /><br />The function leaves, if creation of the descriptor fails.<br /><br />Return value<br />HBufC8*  A pointer to the 8 bit heap descriptor, if creation is successful.<br /> <br /> <br /><br />See also:<br />Creating a heap descriptor <br /><br />AllocLC()<br />HBufC8* AllocLC() const;<br />Description<br />Creates a new 8 bit heap descriptor and initialises it with a copy of this descriptor&#39;s data<br /><br />The function leaves, if creation of the descriptor fails.<br /><br />Return value<br />HBufC8*  A pointer to the 8 bit heap descriptor, if creation is successful. The pointer is also put onto the cleanup stack. <br /> <br /><br />对其它函数也一样<br /><br />可以根据自己的需要来调用带L或是不带L的函数<br /><br />必然会有不带L的函数 可能有带L的相同功能函数

2004-10-14 20:50 carol
晕死,无双和symbian什么关系?

2004-10-14 20:56 symbian
好朋友<!--emo&:P--><img src='style_emoticons/default/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo-->

2004-10-14 20:56 无双
朋友关系<!--emo&:D--><img src='style_emoticons/default/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif' /><!--endemo-->

2004-10-14 21:28 流氓无产者
carol师傅真是双竹一木到家拉<br />明显马甲的说

2004-10-14 21:42 carol
<!--QuoteBegin-流氓无产者+2004-10-14 21:28:08--><div class='quotetop'>QUOTE(流氓无产者 @ 2004-10-14 21:28:08)</div><div class='quotemain'><!--QuoteEBegin-->carol师傅真是双竹一木到家拉<br />明显马甲的说<br />[right][snapback]399388[/snapback][/right]<br /><!--QuoteEnd--></div><!--QuoteEEnd--><br />偶看不是~ 欧相信他们是朋友,至于是什么朋友。。。。嘿嘿

2004-10-21 18:03 无双
symbian开发教程<br /><br />作者:无双<br />原发于loveunix.net<br /><br />其实上面还有一个特殊的符号 那就是_L <br />在symbian中是使用描述符的概念,与普通c/c++程序中字符串的概念不一样<br />后面会介绍它<br /><br />下面介绍symbian的系统结构<br /><br />//=======================================================<br />//<br />//      第二部分:系统结构<br />//<br />//=======================================================<br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br /><br />在symbian os上运行的四种软件<br /> &nbsp; &nbsp;应用程序<br /> &nbsp; &nbsp;服务<br /> &nbsp; &nbsp;引擎<br /> &nbsp; &nbsp;内核<br />symbian系统使用活动对象与客户-服务器对事件处理系统进行了优化<br />硬件资源&#58;<br /> &nbsp; &nbsp;一个cpu,32位arm<br /> &nbsp; &nbsp;一个rom&#40;只读存储器&#41;,里面有操作系统与内建的中间件和应用程序<br /> &nbsp; &nbsp;ROM盘被映射到z&#58;盘,所有的文件都可以通过Z&#58;盘访问。<br /> &nbsp; &nbsp;系统RAM.系统RAM用于两个方面,一是被当前活动的程序和系统核心使用,另一个是当成&#34;C&#34;盘的磁盘空间。这两个部分的大小是变化的,不可以保留某个的大小。由于RAM通常只有8MB到16MB,所以内存可能用完,因此经常出现内存越界错误或是&#40;写文件时&#41;磁盘已满错误<br /> &nbsp; &nbsp;IO设备,包括带数字笔输入的触摸屏,键盘,记忆卡&#40;被当成D盘&#41;,rs232串口,红外口,蓝牙。<br /> &nbsp; &nbsp;电源,包括电池与外接电源<br /><br />symbian os与pc系统的区别如下&#58;<br /> &nbsp; &nbsp;资源限制&#58;cpu太慢与太少内存<br /> &nbsp; &nbsp;没有硬盘,不能使用写到硬盘的虚拟内存,不能保证有足够的空间保存程序或是数据文件<br /> &nbsp; &nbsp;电源条件严格.<br /><br /><br />symbian软件环境如下&#58;<br /><br />server &nbsp;| &nbsp; server| Application| &nbsp;Application | Application &nbsp; &nbsp; Dll <br /> &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;+--------------+------------- &nbsp; &nbsp;boundary<br /> &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<br /> &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp;Enghine &nbsp; &nbsp; | &nbsp;Engine<br />--------+---------+------------+--------------+-------------- &nbsp; Privilege<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;boundary<br /> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Kernel<br /><br /><!--c2--></div><!--ec2--><br />kernel工作在高级别,管理机器所有硬件资源。对其它软件模块提供访问这些硬件资源的接口<br />其它应用程序工作在用户模式<br />上面如果理解普通操作系统如linux的话,那跟普通操作系统没有区别<br />应用程序是一个有用户界面的程序,在独立的进程中运行<br />这与普通操作系统也没有区别<br />服务是没有用户界面的程序.服务管理一个或多个资源,并提供api,让客户可以访问它的服务.服务的客户可以是一个程序或是其它服务.每个服务也运行在独立的进程空间中。<br />在symbian中,使用服务的形式提供类似其它操作系统上用驱动程序或是内核程序提供的功能。如文件系统的访问也是客户/服务类型的。(微内核:P)<br />引擎是一个应用程序中操作数据而不是与用户交互的部分.通常你可以把一个程序分成引擎部分和一个GUI部分,多部symbian内带的程序都是这样做的。<br />一个应用程序引擎可以是一个独立的代码模块或是一个独立的dll,或是几个dll.<br />引擎和应用程序间的边界是模块或dll的边界。<br /><br />所以在symbian中有四个组件类型与三个边界类型。dll或是模块组件对交叉引用来说很方便。它们使系统模块化与保持封装。<br />权限边界对交叉引用比较费资源,但是保证系统对用户太程序隐藏内核与设备<br />进程边界是所有的交叉中最昂贵的,它们保证在ram中分开每个程序<br />

2004-10-24 18:32 无双
继续<br /><br />作者;无双<br />原发:loveunix.net<br />保留版权 转载注明出处<br /><br /><!--c1--><div class='codetop'>CODE</div><div class='codemain'><!--ec1--><br /><br />可执行文件的格式<br />在symbian中有两种类型的可执行文件&#58;<br />exe,每个程序都有一个主入口E32main&#40;&#41;&#40;看上面的例子&#41;,它在独立的进程中运行<br />dll,提供多个入口,由系统或是已存在的线程&#40;进程&#41;调用<br />有两种类型的dll,<br />共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。<br />多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它们从与dll相关的类继承,并通常只有在程序需要它们时才读入。<br /><br />从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别<br />但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll<br /><br /><br />代码执行<br />如果程序代码在rom上,则直接执行,不然需要读到ram中&#40;与普通操作系统不同,普通操作系统都需要读到ram中<br />不能直接在硬盘上执行&#41;<br />可执行代码包括三种类型的二进制数据&#58;<br />程序代码<br />只读静态数据<br />可写静态数据<br />在symbian中对待.exe与.dll是不同的<br />由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存<br />而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload.<br />在rom上的dll像rom上的exe一样直接在rom上执行<br /><br />为了对dll的大小进行优化,symbbian进行如下操作;<br /> &nbsp; &nbsp;多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过名字link.也就是说在.dll中没有名字访问办法,在.lib&#40;引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每创建一个dll都会创建一个用户引导链接的同名.lib&#41;中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引用<br />如果dll被读到ram,那重定位信息&#40;把dll<br />load到什么地址&#41;也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到ram中执行的程序.&#40;rom中执行的多是oem厂家,所以普通开发者多不用关心&#41;<br /><br /><br />多数应用程序有自己有exe来创建进程,其它的程序使用动态库&#40;DL&#41;L的形式,在主服务线程中调用自己的线程<br />多数gui程序都是多态&#40;polymorphic&#41;dll,有一个主入口点NewApplication&#40;&#41;,这个入口点创建并返回一个继承自CEikAppication的对象.这样的程序被apprun.exe调用,app文件名为参数传入。<br /><br />电源管理<br /> &nbsp; &nbsp;电源必须高效使用<br /> &nbsp; &nbsp;在系统已经关机时,确定程序仍然可以运行。如闹钤,关机后,到时时仍然可以开机<br /> &nbsp; &nbsp;电源突然关掉时,关键数据应该可以保存<br /><br />设备驱动<br /> &nbsp; &nbsp;虽然一般不会了解它,但是理解一下还是很有用的<br /> &nbsp; &nbsp;设备驱动工作在两个级别<br /> &nbsp; &nbsp;第一个是中断服务程序&#40;ISR&#41;,ISR必须很短,并且不能做很多事情,因为它可能在任何时间出现,甚至在内核服务中。通常它只是通知设备产生了中断并设置一个标志,要求内核为第二阶段的处理运行一个延迟的函数调用&#40;delayed function call DFC&#41;<br /> &nbsp; &nbsp;在方便的时候内核调度DFC.DFC可以使用多数的核心api,通常只是工作了后向用户线程通知io操作已经完成<br /><br />定时器<br />` &nbsp; 内核支持真机上64hz的时钟与模拟器上10hz的时钟<br /> &nbsp; &nbsp;时钟中断是最高优先级中断,它可以通过User&#58;&#58;After或是RTime&#58;&#58;After访问。时钟中断在关机时停止,所以如果你请求5s后的定时操作,然后跑2s,关机,再开机时它也要等3s<br /> &nbsp; &nbsp;内核同时支持日期/时间时钟,你可以使用User&#58;&#58;At或是RTime&#58;&#58;At。这个定时器很准确。在关机时,如果时间到了,那它会开机,这对闹钟很合适。<br /><br />内存<br /> &nbsp; &nbsp;symbian使用内存管理单元&#40;memory management unit MMU&#41;管理内存<br /> &nbsp; &nbsp;ROM被映射到z&#58;盘,被映射到一个固定的地址。<br /> &nbsp; &nbsp;物理RAM被MMU分在4k的页,每个物理页可以用于&#58;<br /> &nbsp; &nbsp; &nbsp; &nbsp;用户进程的虚地址空间。<br /> &nbsp; &nbsp; &nbsp; &nbsp;内核服务的虚地址空间<br /> &nbsp; &nbsp; &nbsp; &nbsp;ram盘,盘符是c&#58;,ram盘只可通过文件服务进程访问<br /> &nbsp; &nbsp; &nbsp; &nbsp;如果dll不在rom中,那它被读到ram,dll被读到ram里面后页面标记为只读只读的。<br /> &nbsp; &nbsp; &nbsp; &nbsp;MMU的页面转换表.如果想理解的话学习一下操作系统原理<br /> &nbsp; &nbsp; &nbsp; &nbsp;自由页表<br /><br /><!--c2--></div><!--ec2-->

2004-10-25 18:08 OMAP
看完这个帖子,我注册了。<br />

2004-10-25 20:18 无双
<!--emo&:P--><img src='style_emoticons/default/tongue.gif' border='0' style='vertical-align:middle' alt='tongue.gif' /><!--endemo--><br /><br />symbian现在的市场占有量很高 <br /><br />另外nokia正在准备在国内推广symbian<br /><br />我觉得做windows spartphone的前途比不上symbian

2004-10-25 20:41 无双
作者:无双<br />原发于loveunix.net<br /><br />保留版权<br />转载保留出处<br /><br />第一部分总结<br /><br />上面介绍了基本的入门程序与symbian的结构<br /><br />从基本的入门程序中可以看到一个程序的基本结构 <br />那就是从<br />E32main开始<br />使用cleanupstack保护要执行的代码<br /><br />相对于c++而言 语言级不支持throw 和catch,所以定义了函数User::Leave与宏trap保护 并且使用cleanupstack保证程序退出时资源的正确释放<br /><br />第二部分介绍了symbian的结构与设备特点 后面会继续介绍<br /><br />另外nokia的ng 也是使用symbian操作系统 使用的是s60系统<br />后面会介绍到它的不同<br /><br />如果高兴的话 可以买个s60回来 自己给它写游戏<!--emo&:D--><img src='style_emoticons/default/laugh.gif' border='0' style='vertical-align:middle' alt='laugh.gif' /><!--endemo-->

2004-10-26 13:07 无双
本文并不是那种五小时symbian教程或是一天之内学会的<br /><br />所以会比较详细的写出symbian开发中的内容 <br /><br />

2004-10-26 21:17 无双
symbian相关学习的代码<br /><a href='http://www.symbian.com/books/scmp/scmp-source.html' target='_blank'>http://www.symbian.com/books/scmp/scmp-source.html</a><br /><br />安装uiq sdk(最新版是2.1 可以从www.uiq.com免费下载)后<br />下载它们 解压到一个目录<br /><br />然后在有bld.inf的目录下开始执行<br /><br />bldmake bldfiles<br />abld build wins udeb<br /><br />(这些命令的语法已经在上面说明过一次)<br />wins表示是创建windows模拟器 对应的还有armi 结构 这是表示生成真机上 可执行文件<br />udeb表示是unicode的debug版 对应的有urel 表示unicode的release版<br /><br />另外 <br />上面是symbian mobile:c++ program的例子 在前一页提供一个链接可以下载第一章 可以拿来看看<br /><br />

2004-10-26 21:20 无双
作者:无双<br />发表于loveunix.net<br />版权保留<br />转载注明作者与出处<br /><br /><br />//==============================================<br />//   可执行文件格式<br />//==============================================<br />可执行文件的格式<br />在symbian中有两种类型的可执行文件:<br />exe,每个程序都有一个主入口E32main()(看上面的例子),它在独立的进程中运行<br />dll,提供多个入口,由系统或是已存在的线程(进程)调用<br />有两种类型的dll,<br />共享库dll,为一个或多个程序提供固定的api,这些dll多数后缀是.dll,当程序启动时就被读到内存中。<br />多态dll,这些dll实现抽象的api,如一个打印机驱动,socket协议或是一个应用程序。它们的扩展名多不是.dll,而是.prn或.prt或.app等。它们从与dll相关的类继承,并通常只有在程序需要它们时才读入。<br /><br />从技术上看起来与普通系统上动态库的静态载入与动态载入没有区别<br />但是从功能上看就不一样了,一种是实现某种特殊功能的,从某个相关类继承的dll,另一个是普通dll<br /><br /><br />代码执行<br />如果程序代码在rom上,则直接执行,不然需要读到ram中(与普通操作系统不同,普通操作系统都需要读到ram中<br />不能直接在硬盘上执行)<br />可执行代码包括三种类型的二进制数据:<br />程序代码<br />只读静态数据<br />可写静态数据<br />在symbian中对待.exe与.dll是不同的<br />由于.exe是不可共享的,如果它在ram中执行,那与普通pc系统没有区别,如果在ram中执行,那它在ram中为可写静态数据分配内存<br />而.dll是共享的,当dll首次读入内存中时,它被分配到一个特殊的地址,第二个线程需要这个dll时它只要访问已经存在的这份copy就可以。在所有使用它的进程中dll的地址都是相同的。symbian系统维护一个引用计数,当没有其它线程引用时才将它unload.<br />在rom上的dll像rom上的exe一样直接在rom上执行<br /><br />为了对dll的大小进行优化,symbbian进行如下操作;<br />    多数系统支持通过名字与通过数字访问dll提供的入口,由于名字太长,浪费空间,所以symbian只提供通过数字访问,当然在link时可以通过名字link.也就是说在.dll中没有名字访问办法,在.lib(引导库,引导linker正确的link这个dll,这个是在windows中使用的概念,在win下每创建一个dll都会创建一个用户引导链接的同名.lib)中有,你的程序link时link的是.lib,link完成后编译器会自动把引用dll的代码变成数字引用<br />如果dll被读到ram,那重定位信息(把dll<br />load到什么地址)也必须包含在可执行文件格式中,这个的影响就是你不能把一个在rom中执行的程序放到ram中执行的程序.(rom中执行的多是oem厂家,所以普通开发者多不用关心)<br /><br /><br />多数应用程序有自己有exe来创建进程,其它的程序使用动态库(DL)L的形式,在主服务线程中调用自己的线程<br />多数gui程序都是多态(polymorphic)dll,有一个主入口点NewApplication(),这个入口点创建并返回一个继承自CEikAppication的对象.这样的程序被apprun.exe调用,app文件名为参数传入。

2004-10-26 21:25 无双
在syjmbian中可以在rom执行 <br /><br />并且dll也算可执行程序 <br /><br />这样看起来确实是比较奇怪<br /><br />但是<br />symbian是一个手机操作系统 资源不是很多<br /><br />使用dll 只需要在一个线程中执行<br /><br />而线程的开销比进程少的多<br /><br />无论是在内存(每个进程都有独立的内存,而线程共享进程的内存与资源) 还是进程间通信的方面  线程的开销都比进程少的多<br /><br />在rom中可执行代码也是因为手机内存很少(还没有达到128M:D)<br /><br />在rom中也可以执行引起了symbian与其它系统的两个不同<br />第一 就是dll不可以有可写的静态变量 因为如果dll在rom上 它不需要读到内存 所以无法改写 <br />第二 就是rom上exe文件执行时 只需要把可写的变量放到ram中  这也表示可以在exe中使用静态可写变量 <br /><br /><br /><br />

页: [1] 2
查看完整版本: symbian与uiq开发教程


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.