新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式软件中延迟回调的设计和应用

嵌入式软件中延迟回调的设计和应用

作者:胡丙龙时间:2013-02-27来源:电子产品世界

  引言

本文引用地址:http://www.eepw.com.cn/article/142446.htm

  系统通常由处理器外挂多种周边芯片构成,工程师需要花较多的时间来设计和调试这些外围芯片的驱动程序,驱动程序的性能将直接决定系统能否稳定运行和达成设计目标。一般地,处理器厂家会将目标应用中用到的外设驱动打包成板级支持包(board support package),该提供标准的API给用户,开发人员只需按指定方式调用相应的函数获取服务,从而简化系统设计,而厂家在发布包前会做一些测试来确保功能和性能。也有例外,工程师有时不得不定制或重新开发驱动程序,例如: 1)厂家提供的驱动程序是针对某一操作系统的,而用户的系统则是经过充分裁剪甚至无操作系统;2)用户程序框架很成熟,新的驱动程序需要修改以匹配该软件框架,并只使用现有的系统服务。

  一个架构良好的软件,能提供的系统服务将涵盖现时用到的全部功能,并支持有序扩充,为嵌入式系统设计系统服务最重要的是框架简洁高效。驱动程序则是构筑在系统服务之上,为应用程序提供简单易用的与外设通讯的接口,如图1所示。  

 

  在事件驱动的应用中,需要用到的系统服务就包括回调函数(callback functions),它被广泛使用来简化驱动程序的设计。以UART驱动程序为例: 应用程序首先向系统申请DMA服务, 由DMA控制器从内存中将一个100字节的包顺序从UART控制器发出,发送过程可能会持续1000ms, 发送完成才可以执行后续相关任务。如果内核此时通过查询方式获取发送状态,无疑将大大地降低系统运行效率。更简便高效的方式是引入回调函数机制,在初始化时提供回调函数,请求的任务完成时该回调函数将被自动调用。

  事件的处理过程一般和硬件中断关联在一起。高优先级的处理任务需要直接放在中断服务程序中执行,对于实时性要求很高的应用,中断服务程序中应尽可能短小。而大量的、长时间的处理则可以放入回调函数中,以较低优先级(通常是软件中断级)运行,并随时可以被高优先级的其它硬件中断抢占。这样的机制要求对所有的回调函数统一管理和分派,有些可能还要求能设置回调函数的优先级。此时,回调函数并不是在请求的事件发生时马上被执行,而是延迟至合理的被调度时刻运行。这称为延迟回调(DCB, deferred callback)。

  以高性能Blackfin和SHARC处理器平台为例,ADI公司提供了完备的系统服务和驱动包(System Service & Device Driver),它能够独立运行,也可与操作系统协同工作,其中就包括高效率的延迟回调服务,用户编写驱动程序的工作被大大简化。不过,一些高实时系统比如电机驱动器无需操作系统,类似的框架在实际应用中仍显复杂。这里介绍的方法以最简洁的方式实现延迟回调服务,可单独封装成模块,应用于任何处理器。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词: 嵌入式 BSP

评论

技术专区

关闭