--嵌入式开发概略--
(2006-07-13 07:09:11)
下一个
嵌入式软件系统的开发要点
(这里均指应用开发,而不是内核本身的开发)
嵌入式操作系统内核,后文均简称为嵌入式核心
嵌入式核心与通用系统核心有着大体相似的构成,但是由于嵌入式系统地实时性要求,
嵌入式系统必须具备下列特征:
1.实时性:
嵌入式核心必须拥有很高的实施响应的特性,也就是说,在既定的时间必须对要求给出答复,比如在通信,音视频录像,宇航等系统中。
2.虚拟设备管理的剪裁
为了达到实时性的要求,在通用系统中被广泛运用的手段都受到限制,比如虚拟文件系统被分层式的文件系统代替,并且限定文件数,和目录名称;不支持内存分页技术,转而使用真实地址的cache技术;不支持模块的动态加载。
3.系统实现的高效性
嵌入式核心的开发及周边应用模块的开发,要求很高的代码效率,以确保以尽可能少的代码完成尽可能多的计算,同时减少调试的困难。
4.同时支持多平台能力的牺牲
嵌入式系统一旦与应用模块被一起编译,将只对某个硬件平台有效,不具备动态兼容的特性。因此,在嵌入式系统里,嵌入式核心的兼容能力,仅限于编译前多平台支持的代码的选择或是编译开关。
嵌入式软件的实现主要包括下列要点
实时性任务的实现:
除了与操作系统相似的功能之外,实时系统要求很高的任务切换能力,并尽量减少切换成本,在不同的任务切换的设计上采用抢占式方式(即一个任务可以通过制定优先级的方式被调度)。保证重要的任务可以得到优先执行。
任务的效率评价通常都在挂接某些必要的模块之后进行,真实反映实装条件下的任务调度水平。
中断句柄的管理
实时系统中,各种硬件设备都有一个相互不同的标识,称为句柄,句柄的管理策略代表了某个实时系统的效率的高低,句柄都是通过硬件中断来实现的,硬件中断依赖于CPU的设计和软件核心的响应策略,由于不允许出现通用系统里的等待,一般都严格控制超时,超时则进入错误处理。
任务的同步协调
实时性要求各个任务之间有很高的任务协调能力,通常选择信号量作为唯一的同步手段,不同级的任务由不同级别的信号量,级别越高,又能快速的被执行,同时为了防止低级别在某一时刻拥有的高响应的要求,又附加以优先级反转的功能,即在某一时刻,当等待一个信号量时,原本优先级底的信号量由于传输缓冲已满或其他的原因,需要立即处理的是,将通过修改消息队列里的优先度,提高信号量的级别,从而先期被响应
消息机制
在实时系统中,信息共享通常只使用消息机制,在消息结构里,定义消息所属任务,消息标识符,消息响应模块的名称,消息需要传递的数据的缓冲区指针等。消息总是成对出现的,在发送消息的模块里,开头部分发送消息SendMessage(),在最后的尾部接受消息处理结果RecvMessage(),而在消息处理的主题模块里,通常有各种消息的响应代码,开头是RecvMessage(),然后是根据消息响应模块的名称处理响应的消息,结果出来以后SendMessage(),结果返回给发送消息的模块。
文件管理和设备管理
实时系统中通常不将文件管理和设备管理纳入核心中,也就是说,文件管理和设备管理将根据实际的产品情况选择性地加入读懂代码,因此,也很少有兼容性可言。为了适应不同的场合,文件系统不使用虚拟文件系统转而采用多层式的文件系统来增加兼容性。文件系统通常由产品设计的公司自行编制完成。
内存管理策略
实时系统中,所有内存都以实地址方式映射,通常分为数据不断改变的cache领域和启动后数据不发生改变的领域uncache领域,内存的边界对齐手段被强制运用,以加快存取速度。通常为16位的整数倍。
在日本,日本本土的嵌入式系统iTRON被广发使用,它拥有比嵌入式Linux搞一个数量级的响应速度,但是在软硬件支持尚不够丰富。很孤独。也不如Linux健壮,iTRON的下一代是T-Engine,可以通过T-engine论坛申请获取代码(免费)(T-engine的开发者是东大的坂村教授,真有去坂村研究室作研究的冲动,岁月不饶人,叹),学习嵌入式编成的环境可以利用skyeye芯片模拟软件来实现,并且需要安装VMWare软件。比起内核的开发来,应用的开发需求更为迫切,实施嵌入编成中,函数指针,volatile保留字,宏定义被大量使用。鉴于调试多任务系统的困难,调试的手段包括,终端的log显示,断点设定时的内存dump,时间跟踪器的跟踪,调试宏,调试代码的测定,同步构造中相关数值坚实,断言等手段。
复杂的嵌入式系统代码达到500万行级别,代码调试变得极为困难,这对各个开发企业来实都是巨大挑战。专业的圈子里通常使用CVS进行代码开发管理,使用EMACS或其变体作为代码编辑器,嵌入式开发已经与GNU的软件密不可分,GNU是由世界最顶尖的编程高手,超级黑客麻省理工的RichardStallman博士创立的,了解GNU,可以在Google检索,在那里可以领略关于版权的不同的的哲学观点,你的思想可能会获得解放。由于GNU是由世界上许许多多的软件奇才参与的项目,里面的一个软件都闪耀着自由与智慧的光芒。GNU的核心不在于是否收费,而在于源代码必须公开,以及基于GNU源代码的代码也必须公开的第归过程。刚开始使用EMACS会感觉不畅,很多键的组合需要记忆,但在用熟之后,程序员将再也不能离开EMACS。