北大青鸟:手机软件开发指引

来源:[url]http://www.accp-teem.com.cn/ArticleView/2007-7-12/Article_View_1176.Htm[/url]
1 手机软件的运行环境
1.1 概述
手机可以被看作袖珍的计算机。它有CPU、存储器(flash、RAM)、输入输出设备(键盘、显示屏、USB和串口)。 它还有一个更重要的I/O设备, 那就是空中接口。手机通过空中接口协议(例如GSM、CDMA、PHS等)和基站通信,既可以传输语音、也可以传输数据。
手机的CPU一般不是独立的芯片,而是基带处理芯片的一个单元,也称作CPU核。基带处理芯片是手机的核心,它不仅包含CPU核、DSP核这些比较通用的单元,还包含通信协议处理单元。通信协议处理单元和手机协议软件一起完成空中接口要求的通信功能。
随着芯片技术的不断发展,越来越多的外围电路可以被集成到基带处理芯片中,例如BAP,即基带模拟处理器。这样手机才可能越做越小、越做越便宜。
1.2 单CPU和双CPU
很多手机只有一个CPU,也就是基带处理芯片中的CPU核。在这个CPU上既要跑通信协议,又要实现用户界面(称作UI或MMI)。当然DSP会分担一些计算量繁重的工作,例如语音编解码、安全层的各种算法等。
在市场推动下,手机功能在不断发展。摄像头、MP3、蓝牙这些功能可以依靠硬件,对CPU的压力还不是很大,但java虚拟机、嵌入式浏览器等应用软件就会对CPU资源有较高的要求。
单CPU的首要任务是完成通信协议。通信协议软件有着很精确的定时要求,如果这个CPU还要兼顾很多应用软件的话,就难免吃力。于是双CPU手机应运而生。
顾名思义,双CPU手机就是有两个CPU的手机,一个CPU专心把通信协议做好,另一个CPU负责UI、java虚拟机、嵌入式浏览器等应用功能。两个CPU可以做在一个芯片里面,也可以分开。
市 场上的实际情况是,很多手机设计公司(Design House)没有基带处理芯片的开发能力,他们购买国外公司的手机模块,自己在外面再加一块CPU。模块跑通信协议,自己加的CPU跑UI和应用软件,两者通过串行口通信。很多Design House也会购买国外方案商的开发板级方案,自己做PCB、软件上改改UI和外设驱动。
市场上的智能手机 基本上全是双CPU方案,什么Windows CE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux全是运行在第二块CPU上的。这些商业操作系统无法和无线通 信协议软件集成到一块CPU上。双CPU的手机功能比较多,但它们一般体积大,耗电多,成本高。现在市场上的大部分手机还是单CPU的。
目前的大 部分手机应用,例如Java、BREW、WAP、邮件、摄像头、闪存、MP3、蓝牙,在单CPU方案里都能实现。我认为不管3G、4G如何发展, 小巧、实用、低成本的单CPU方案总会占据较大的市场份额。微软在单CPU方案的手机市场还没有立足之地,又怎么谈的上什么引领方向呢?
本文主要介绍单CPU手机,大多数论述也适用于双CPU方案的通信CPU。
1.3 3G和4G
3G和4G是指第三代、第四代无线通信技术,对手机而言,它们改进的是空中接口的效率,空中接口能以更大的带宽传送数据。通过手机无线上网的速度会更快。这和话音业务、手机应用软件没有直接的联系。
当然,手机的嵌入式数据业务由于更高的带宽,会产生更多的可能性。不过这些可能性的实现还是会受到手机输入慢、显示屏小等条件的制约。
2 手机软件的组成
2.1 概述
手机软件和PC机软件一样从中断向量表开始,因为比较小,看上去更加清晰。中断向量表的第一个跳转指令当然是跳到复位的处理程序,后面是中断处理、错误处 理的跳转指令。一上电,手机就跳转到复位的处理程序,开始检查内存、初始化C运行环境,然后创建第一个任务。这个任务会按顺序创建、启动其它任务。绝大多数手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。
手机软件可以粗略地分成启动模块、操作系统、协议栈、数据业务、本地存储、驱动程序、用户界面和其它应用。启动模块前面已经说过了,下面简单介绍其它部分。
2.2 操作系统
操作系统在手机软件只占很小一部分。它的主要功能就是提供多任务调度、通信机制。有的操作系统会提供动态内存分配,定时函数,但这些都不是必须的。例如需要动态内存分配的模块,可以自己管理一个内存池,这样更易于隔离模块和预测内存需求。
大多数手机的操作系统都是一个很小的内核,例如REX、HIOS等。高通REX的源代码连C代码加汇编也不过一千多行,编译后不过是2、3K的代码量。而一般手机软件有几百到上千个源文件、超过一百万行的代码。
2.3 协议栈
协议栈是手机软件最复杂的部分,它的复杂性在于它和基带处理芯片的设计密切相关。只有具备芯片设计能力的企业才可能开发协议栈。协议栈会使用基带处理芯片的所有资源。
2.4 数据业务
数据业务主要有两种:在前一种,手机相当于一个调制解调器,PC机通过手机上网,网络协议全在PC机上,手机提供数据链路。另一种就是嵌入式数据业务,手机内部包含TCP/IP/PPP等协议,有时还要实现HTTP和嵌入式浏览器。
2.5 本地存储
手机都有本地存储功能,存储电话本、短消息、用户设定等。一般手机都有一个基于flash的文件系统。早期的手机存储是基于EEPROM的。
2.6 驱动程序
硬件驱动一般指外设驱动,不过有的外设已经被集成到基带处理芯片中了。驱动程序包括键盘、电源管理模块、LCD、flash、RTC、串口、USB、SIM卡或UIM卡、射频驱动等。
2.7 用户界面
用户界面(UI)又称作人机界面(MMI),它负责和用户的交互,在必要的时候调用其它模块的功能。除了手机的必备功能外,用户界面也可能包含一些相对独立的应用程序,例如日程表、游戏等。
2.8 其它应用
其它应用包括Java虚拟机、WAP浏览器、邮件软件等,是一些比较大,又相对独立的应用模块。
基本上讲完了。大家肯定看得挺没意思吧。这些程序和微软的longhorn、metedata有什么关系呢?手机程序绝大部分是用C语言写的。但对于做应用软件的程序员要求具备面向对象、设计模式的思维能力,然后用C语言实现出来。
高通的BREW就是用C语言硬生生地模仿C++,弄出很多奇怪的宏。一般应用软件的开发不用这么死板,但对各种软件设计方法的了解还是必要的。
3 手机的核心技术
手机的核心技术是芯片和协议栈,两者是密不可分的。芯片设计需要协议栈来验证,协议栈必须充分发挥出芯片的功能。芯片的CPU核、DSP核都可以买到现成的单元,但通信协议部分就需要自己设计了。手机比较难做好的是耗电量、恶劣信号环境的性能等。
4 第三方软件
4.1 原理
“第三方软件”这个词的含义比较宽泛。本文用它来指代不是硬编码在手机里,而是可以通过数据线或网络下载到手机上,可以装载、运行,也可以删除的软件。
前面讲到的软件都是完整程序的各个部分。这些部分会被放到一起编译,产生一个二进制文件,通过JTAG口(升级时可以用串口)下载到手机的flash中。手机一上电,就会从指定地址开始运行。这个地址的内容就是跳转到复位处理程序的跳转指令。哈哈,又讲回头了。
第三方软件是指手机可以通过数据线或者网络下载一些可执行文件到文件系统中。然后有一个装载器可以执行这些文件。这样第三方就可以开发一些应用程序,下载到手机中来扩充手机功能。
这些可执行文件现在主要有两种格式:java程序和BREW程序。java程序需要java虚拟机装载运行。BREW程序是一个很奇怪的东西,它实际就是用与编译手机程序相同的编译器编译出来的目标代码。这些目标代码必须是可以重新定位的,即不能包含全局和静态变量。
装 载器将程序将执行权传给给BREW程序,一种听上去更安全的说法是调用BREW程序的入口函数。这个入口函数的位置在文件中是固定的。装载器在调用 BREW程序的入口函数时会传入一个地址。通过这个地址,BREW程序能够顺藤摸瓜,找到系统提供的各种API的地址,它通过这些API访问手机的显示、 通信等功能。
java程序基本上是平台无关的,针对各种平台设计的java虚拟机隔离了平台的大部分特性,除了厂家特意提供的一些OEM功能。BREW程序显然是平台相关,换一个CPU,就不认识原来的目标码了。
4.2 其它
除了java、BREW外,Windows CE、SmartPhone、WindowsMobile、Symbian、嵌入式Linux这些商业操作系统当然可以提供各种创建第三方程序的方法。在 这些环境写程序和在PC平台写程序很相近,基本上体会不到嵌入式编程的特点,只是屏幕小一些,输入麻烦一些。
这些第三方软件不是必需的。手机在3G的市场中只占了一个较小的部分,网络是大头。而第三方软件相对于手机来说,所占的份额就更小了。
《程序员》有一个嵌入式移动开发的专栏,总在讲这些手机第三方软件的开发手机软件只是嵌入式软件的一部分。第三方软件在嵌入式移动开发中又能占到多少比重呢?
5 结束语
需要说明:关于以后的市场究竟以单CPU手机为主,还是以双CPU手机为主的问题,我倾向于单CPU手机,但这只是我个人观点。实际市场会怎么发展,殊难预料。
对于一个芯片两个CPU核的方案,从软件角度看我是很赞成的。将应用软件和协议软件分开,协议软件可以更加稳定,应用软件可以自由发展,使用大量在PC环境已经成熟的技术。

转载于:https://blog.51cto.com/192381/33888

北大青鸟:手机软件开发指引相关推荐

  1. 安卓手机软件开发_无代码,手机app软件开发,让人人都是专业开发工程师

    近期,谷歌发布了自己的无代码在线app开发平台,这款全新工具旨在让任何一个人都可以轻松进行手机app软件开发.这样的动作无疑指引着安卓软件开发的未来. 无代码开发手机app其实由来已久,业内反复讨论了 ...

  2. 手把手教你iPhone 3G手机软件开发

    手把手教你iPhone 3G手机软件开发 "iPhone 是一款革命性的.不可思议的产品,比市场上其它任何移动电话整整领先了五年,"苹果公司首席执行官史蒂夫·乔布斯如是说,&quo ...

  3. 从事手机软件开发需要掌握什么知识

    与其说事先掌握好什么知识,不如说有没有不断学习掌握新知识的心态和思想准备.体力准备更重要.给自己找准一个方向最重要. 从开发的角度上简单的说手机软件可以分成应用软件.用户界面.操作系统.底层与设备驱动 ...

  4. 求职 个人简历 手机软件开发工程师

    个人信息 姓名:  王成           性别: 男                    出生日期:  1985.10 学历:  大专           专业:  计算机网络技术   工作年限 ...

  5. 高通Android手机软件开发培训

    为期两天的高通Android手机软件开发培训结束了.这次高通针对QSC7x27/7x25/QSD8x50的基带芯片进行了两天的Android手机软件开发培训.参加人员都是我这样的各个OEM厂商的软件开 ...

  6. 安卓手机软件开发_安卓85家庭理财软件个人记账(app)

    安卓85家庭理财软件个人记账(app) 该设计有演示视频 100%能运行 买重包换 保密发送 一校一份 编号: 安卓85 语言+数据库: 安卓 论文字数: 12674字 摘要 随着社会经济的不断高速发 ...

  7. 重庆北大青鸟ACCP软件工程师课程内容有哪些?

    重庆北大青鸟以培养出无数IT职场精英,帮助大家实现了自己理想和价值.近期又是初.高考的紧张时间,很多家长担心自己孩子的前程,便开始咨询各种学校,有家长就问到重庆北大青鸟ACCP软件工程师课程内容有哪些 ...

  8. Symbian S60平台手机软件开发

    求教 小弟虚心求教,哪位给我讲讲Symbian S60平台手机软件开发的相关内容,最好能指导一下小弟. 我正在准备制作一个课题,有关手机软件开发的,正要补充相关知识. 走过路过的能推荐点东西的也谢谢了 ...

  9. Android手机软件开发 课程 教学 大纲

    <专业考证培训及考证>课程教学大纲 课程编号:024015    授课学时: 80       学分数: 4    适用专业:通信技术 一.课程的性质和任务 课程的性质: <专业考证 ...

最新文章

  1. Confluence 6 如何配置快速导航的同时查找数量
  2. 抽奖 开源 html5,抽奖转盘.html · smilestone/awardRotate - Gitee.com
  3. (转)性能分析之-- JAVA Thread Dump 分析综述
  4. 管理信息系统 第三部分
  5. 255.0.0.0子网掩码相应的cidr前缀表示法是?_【洛谷日报#246】浅谈表达式的求值(Vol.2 进阶)...
  6. 天池 在线编程 聪明的销售(计数+贪心)
  7. 怎么在计算机里找到CF里保存的视频,电脑怎么查看穿越火线录制保存视频?操作方法...
  8. python的自带的ide运行_为什么同样的语句在python自带的ide和pycharm中运行的结果不一样?...
  9. 地线与接地螺丝_快来看看新能源电动汽车充电时,地线的安装情况吧!
  10. Robust line matching through line–point invariants
  11. 使用Xtrabackup来备份你的mysql
  12. 运算符in和not in
  13. 计算机主板自动重启,电脑自动重启频繁是主板的问题吗
  14. Java Audio Video Encoder
  15. 阿里云大数据+AI技术沙龙上海站回顾 | ​揭秘TPC-DS 榜单第一名背后的强大引擎...
  16. 用c语言编写匀速直线运动,匀速直线运动知识点总结
  17. 学之思考试系统功能开发文档
  18. pta厘米换算英尺英寸
  19. 【转载】html转义字符
  20. elasticSearch学习笔记04-同义词,停用词,拼音,高亮,拼写纠错

热门文章

  1. Shell编程~脚本cheo命令
  2. unity透明通道加颜色_Unity SRP 6.透明
  3. 如何下载微软虚拟学院MVA字幕
  4. linux 单曲循环函数,怀旧音乐播放器 Exaile(也有单曲循环)
  5. 什么是云计算?运维与云计算之间存在什么样的关系?
  6. mkdocs - Config value: ‘plugins‘. Error: The “minify“ plugin is not installed
  7. 20220720 开窗函数2:rank()/dense_rank()
  8. MIPS架构的传奇演化
  9. 计算机网络原理(笔记)
  10. .Net ( c# ) 与 Fortran 混合编程实例(二):杆系结构有限元法——平面桁架解答(3)