jic35导读:随着微电子技术的发展,嵌入式系统的功能越来越强大,像uart口、irda、usb、i2c以及spi这些串行接口或设备同时存在于一个嵌入式系统中,实现对它们的统一管理将能极大地提高整个嵌入式系统的可移植性、易用性以及开发效率。本文通过对嵌入式系统串行设备管理技术的研究,提出了“带usb的串行管理”模型,并详细阐述了串行设备管理的实现过程。
串行设备管理
串行设备管理是指对com,irda、i2c、modem等流设备和接口的统一管理。具体说,就是通过统一的上层应用层接口和下层驱动层接口实现对串行设备的统一管理和透明化处理,从而提高整个系统的易用性和可移植性。usb作为一种新型的高速串行总线,由于具有复杂性和高速性等特点,在嵌入式操作系统中一般专门为其建立一个usb模型而不放入串行设备管理中。虽然这样有利于全面地管理usb主机、usbhub以及usb设备,但整个模型实现代码大而难,且在嵌入式系统下位机中多是usb设备而没有usb主机和usbhub。针对这一特点,本文把对usb设备的管理加入到串行管理中,使得对usb设备的访问如同对一个串口的访问一样方便,从而提出了带usb的串行管理模型。
带usb的串行管理模型
整个管理模型由两层构成,上层为操作系统应用层接口函数集,主要是统一化的串行流接口函数,如openfile等;下层为硬件驱动程序层对象和函数。串行管理的设备对象由虚拟化的hwobj结构体来定义,虚拟对象的登记和管理则是通过对device_list结构体的管理来实现。hwobj结构体定义为:
typedefstruct_hwobj{
void*device_parent;//指向device_list结构
unsignedshortdevice_index;//物理设备号,指向实际的串行设备或接口
unsignedlongbind_flags;//中断服务线程处理标志位,预留
unsignedlongintid;//中断类型,预留
void*reserved;
phw_vtblfunc_tbl;//硬件驱动函数对象表
}hwobj,*phwobj;
device_list结构体定义为:
typedefstruct_device_list{
char*dllname;//设备dll文件名,预留
unsignedlongnumberofdevices;//设备数量
void*devicearray;//设备队列
}device_list,*pdevice_list;
为了解决usb的高速缓冲问题,专门采用了两个单独的循环队列,一个用于缓冲usb的in传输数据,一个用于缓冲usb的out传输的数据。
带usb的串行管理的实现
为了便于给应用层编程人员和驱动程序编程人员提供良好的编程接口,接口函数采用了与windows操作系统中提供的api函数一致的函数名和参数。整个带usb的串行管理的实现包括名字解析与应用层接口函数的实现、串行设备低层驱动接口、应用层接口函数与低层驱动接口的数据传输通道的实现。
名字解析与应用层接口函数
这一层的主要任务是实现设备文件到对应设备指针的映射。应用层主要接口函数有createfile、openfile、writefile、readfile、closefiie等。具体实现上主要是设备名的登记和设备命名空间的管理。设备名的登记是指通过设备登记表来注册设备文件名所对应的物理设备文件名、函数操作指针和设备命名空间等。其中设备命名空间是指文件系统的统一文件与设备的访问接口表,应用程序通过文件系统里的特殊入口(设备文件名设备句柄)访问外围设备。
串行设备低层驱动接口函数
串行设备低层驱动接口通过提供以函数指针为成员的结构体来实现,每一个结构体函数指针成员对应一个具体的硬件驱动函数。
带usb的串行管理的数据传输通道
usb的管理
由于相对于其它串行设备来说,usb是高速设备,且为典型的主从式设备,因此,除了专门为usb采用了两个循环队列外,还针对usb是主控制设备的情况,采取通过自定义双向访问协议包来解决下位机主动发起访问的情况。
串行设备的单道访问
由于串行设备在操作系统应用层被抽象为一个特殊文件,因而需要考虑是否让多个应用程序同时访问一个特殊文件的问题,如果允许同时访问则称为多道访问,否则称为单道访问。为简单起见在设计中通过记录串行设备号对应的运行状态来实现串行设备的单道访问。
多设备的并行访问
通过跟踪正在处于工作中的串行设备的设备号和记数值,来实现多个不同串行设备的并行运行。
数据传输通道
数据传输通道如图2所示。数据传输流程大致如下:程序(线程)调用writefile或readfile把要发送或接收的地址指针和数据大小传递到相应的硬件属性表中,writefile或readfile函数返回,应用程序继续运行或挂起等待数据操作完(硬件中断自动完成),zui后由中断返回一个消息唤醒挂起程序(线程)。对于usb设备则先通过usbin和out循环队列缓冲再通过usb中断进行传输。
嵌入式操作系统中的串行管理是操作系统i/o子系统的一个重要组成部分,本文介绍的串行管理模块已加入某国产的商用嵌入式操作系统中,并在深圳某高科技公司的smartphone项目中得到应用。
液压泵常见故障 02
无心磨床的调试工作分析
白茶除湿烘干机优势是什么?
南京盐水喷雾试验机标准图谱分析风采
橡胶试验用裁刀|橡胶哑铃状试验裁刀|橡胶哑铃状试验模具
嵌入式系统的功能强大 提高开发效率
淄博手术室多功能控制系统设计安装
高压清洗机在清洗小直径管道中的应用
智能人工气候室的优势解析
旅游景区自动气象站有利于农户及时采取防护措施,保护农作物生长
热固复合聚苯板 硅质板厂家现货供应
一款适用拟南芥的人工培养设备
表面电阻测试仪使用说明
紫外线老化试验箱的冷凝功能与喷淋功能
KIMO凯茂CP110变送器产品特色介绍
溶解氧浓度测量前的校准
钢铝拖链出现故障了怎么办
净水设备的性能要求
蠕动泵厂家哪家比较靠谱?从精度方面出发
optoquest在薄膜加工技术上的运用