应用开发人员不需每次都对他们编写的一项应用进行重复的劳动 。工具和应用开发架构已获得了长足的发展,以至于应用开发人员能够集中精力创造附加价值,而无需担心底层的应用架构和细节 。那么嵌入式系统的开发是否也朝着同样的方向发展?
过去,嵌入式系统通常是由工程师自行利用汇编语言设计,在定制硬件上运行 , 不需任何通信技术或安全架构 。这些系统会像独立设备一样运行,在许多情况下甚至不用操作系统的支持 。
事实上,这些系统只会运行一个专用的单任务或进程 , 开发人员将负责系统的每个方面、系统与底层硬件的互动及用户输入和输出(若有必要) 。设备的每个方面都要由开发人员编码 。一般来说,应用开发人员必须非常熟悉底层硬件,而且或许还曾经参与硬件的设计 。
随着时间的推移,开发人员不再使用汇编语言自行设计操作系统程序 , 而是改用C/C等高级语言或利用软件库开发字符串处理、文件I/O、图形、视频等常用软件 。
许多知名的软件开发工具都提供软件库以协助应用软件开发,我们可将这些软件库视为操作系统和应用软件间的中介层 , 但在许多情况下应用开发人员仍需控制对象的生命周期、线程和内存管理 。
许多应用开发软件库其实就是应用软件和底层操作系统间的中介层,而许多软件库还提供原代码以方便设计人员了解软件库的工作方式,并通过检查源代码来确定软件库调用本地操作系统API的速度 。
应用开发软件库提供原代码的另一优点是设计人员可借此扩大软件库功能 。只要将应用开发和操作系统抽象模型往前推进一步 , 我们就能得到 (多数情况下) 与操作系统和处理器无关的应用开发模型 , Java和.NET就是很好的例子 。在这个模型里,应用开发人员与底层操作系统的距离会更远,对象生命周期是由应用软件的运行时间环境(JVM或.NET运行时间)、类别、对象、事件及与底层操作系统API无多大关系的方法处理的 。从C/C转向管理应用开发将带来更多好处,这就像应用开发人员从汇编语言转到C/C语言后,就能加快产品开发 。
底层硬件的抽象化是将应用软件开发从汇编语言通过C/C转换到管理应用开发环境的附带效果之一 。应用开发人员多半不需知道硬件细节 , 硬件抽象层则可搭配设备驱动程序将应用软件与实际硬件隔开 。
但这与嵌入式操作系统的发展有什么关系呢?
嵌入式设备的开发人员可以选择所需的设备开发工具和操作系统 。但在选择硬件、操作系统(如需要)和应用开发工具时,需进行一个平衡 。相关因素可能很复杂,决策过程当然是以商业和技术考虑为主,但最后多半仍然以时间、资源和成本为重点 。
您的嵌入式系统价值在哪里?是运行设备的用户界面、应用软件、程序或服务,还是为设备传送和接收数据的服务器?研发人员应将时间用于增加产品价值的应用软件和技术上,但线程管理、内存管理、网络堆栈、媒体播放器、网络浏览器和各种服务器技术该怎么办?
这些技术通常是由操作系统提供,您的研发团队是否能在数月内开发出一套比市场上TCP/IP协议堆栈小5kb和快10%的TCP/IP协议堆栈?或是将时间用于更新操作系统的网络服务 , 以便符合最新规格?
问题在于让您的研发团队将时间用于编写、开发、测试和维护操作系统层级的软件组件是否是一种好的做法?
答案或许不是 。那么,“发展嵌入式系统时,我要将时间和资源用在什么地方?”这个看似简单的问题可以有很多答案 。我们可将时间用于硬件方面,或许为您的嵌入式系统编写硬件抽象层代码(如果需要)以构建操作系统基础架构代码和其它低水平的支持代码,或者您的团队也会将时间用于高水平、定制的最终用户体验方面 , 并将您的产品特定的知识产权添加到现有的操作系统中 。
希望您能看到应用开发技术进步和嵌入式系统设计与发展方向间的相似处 。
有多种操作系统可以选择 。无论是自主开发的操作系统还是开源操作系统抑或是其他,您都要做出许多评估才能为嵌入式设备找出最合适的操作系统 。
评估内容包括程序大小、处理器支持、本地硬实时支持、硬件设备支持的范围 (或参考硬件)、源代码存取及是否有开发商和合作伙伴可以帮助您进行嵌入式系统的开发 。
上市时间越来越重要,加快上市时间的方法之一是将时间用于提高设备的附加价值部分 。但操作系统怎么办?嵌入式操作系统有不同的类型和大小,有些操作系统仅提供原代码,研发人员必须先建立一套工具链,然后才开始发展设备;还有些操作系统则提供完整的操作系统镜像文件,研发人员可直接开发应用软件 。前者让您将宝贵的人力和时间浪费在操作系统和工具链的建立及配置,后者才能加快设备的开发和上市时间 。
让我们分析两种选择,一是使用市场上销售的操作系统和现成的参考电路板 。这种做法的优点是让您得到操作系统的所有功能,只需把您的应用、服务和驱动程序加在操作系统之上即可;缺点也正是您得到了所有功能,这表示操作系统会比所需庞大,其中包含许多您的嵌入式系统不会用到的功能,而且无法针对嵌入式系统应用进行定制 。
第二种选择是使用一个能够进行定制、满足嵌入式设计需求的操作系统(可称之为一种组件化的操作系统) 。或许闪存引导能力、快速引导时间、支持多种处理器架构、本地硬实时支持等对于您的设计很重要,除此外,还有许多其它理由让功能完整的台式操作系统或服务器市场专用的操作系统不适合您的嵌入式设备 。
或许能够提供设备相关功能的操作系统正是满足各种嵌入式系统市场需求的理想选择 , Windows CE和Windows XP Embedded也许是组件化嵌入式操作系统的最好实例,它们可以通过所支持的处理器、硬件、实时、网络和媒体技术彼此互补搭配 。
定制不表示一定要花很多时间或克服许多困难才能完成操作系统配置以满足设备需求 。典型的Windows XP Embedded设计从概念到交货通常仅需12~14周 。这套组件化操作系统大约能分割为12000种软件组件、9000个驱动程序及3000种系统功能 。嵌入式系统开发人员可选择嵌入式设备所需的个别组件或技术,而不需安装整套操作系统 。
广泛的硬件和软件支持是使用Windows XP Embedded操作系统的优点之一,只要操作系统镜像文件包含适当的操作系统依赖性,任何能在Windows XP上运行的驱动程序就能在Windows XP Embedded上运行 。就此而言,依赖性是开发人员必须考虑的重要问题之一 。
您在建立嵌入式操作系统镜像文件时或许已经知道您的用户界面、应用软件和服务都要依赖特定的操作系统功能,但增加这些功能和熟悉所有的操作依赖性却需很长时间 。Windows CE和Windows XP Embedded所提供的工具都包含许多操作系统功能(称为组件),这些组件含有所需的依赖性信息 。例如,假设您正在使用Windows CE,并想把80kb左右的HTTP Web Server加入操作系统 。您只要从组件目录把这个组件加入到工作区(workspace),该组件的依赖性信息也会自动地进行添加 。使用组件、依赖性和操作系统配置模板就能迅速完成嵌入式操作系统的配置和测试 。
应用开发人员可以通过使用合适的应用开发工具和架构来加速产品上市时间,也可以通过使用组件化的嵌入式操作系统加快产品的推出 。可以做此推断,把合适的应用开发工具和程序架构以及组件化嵌入式操作系统融为一体,也许这是设计人员加快产品开发的一条最佳路径 。
【如何提高定制嵌入式设备开发效率】