-1-
中国科技论文在线
基于 VxWorks 的多任务并行 IEEE1394 协议栈的设计
与实现1
代江波,谭怀亮,梁旭
湖南大学计算机与通信学院,长沙(410082)
摘 要: 为满足军工嵌入式系统对高可靠性和实时性的需求,通过对 IEEE1394总线标准软
硬件特性的分析,提出并设计了多任务并行 IEEE1394协议栈模型。最后在 VxWorks平台上
实现了基于多任务并行 IEEE1394协议的数字视频解码与 SBP2(串行总线协议 2)移动存储
应用,测试结果显示基本满足军工应用需求。
关键字:IEEE1394;VxWorks;多任务;嵌入式
中图分类号:
1 引言
IEEE1394 高速串行总线最初由 Apple 公司研制并将其命名为 FrieWire【1】,美国电子电器
工程师协会( IEEE)接受其为 IEEE1394-1995 规范。在后来的发展中, IEEE 又对 1394 规范进
行了多吃改进,形成了两个向下兼容的规范: IEEE1394a 和 IEEE1394b。IEEE1394b 在前几个
规范的基础上进行了较大的改进,在更改了结构并使用新的电缆(CAT25, Fiber)后 ,大幅度提
高了总线的传输速度(由 400Mbps,800Mbps 达到 , )和传输距离(由原来的
米提高到 50 米、100 米以上) 。IEEE1394 因其优异的性能,其应用已经从消费电子类延伸
到工业、军事、航空航天领域【2】,如:IEEE1394b 被当做 F-22 猛禽战斗机上的总线,同时
也使用在 F-35 上,NASA 的航天飞机也用它来监视可能在降落时撞击到的碎片。
VxWorks 是由 WindRiver 公司推出的一款适用于所有主流 CPU 目标平台的高性能强实
时嵌入式操作系统,同时具有出色的可伸缩、可裁剪和高可靠性。VxWorks 的微内核 Wind
具备快速多任务切换、抢占式任务调度、任务间通信手段多样化等特点。与其配套的集成开
发环境 Wind River Workbench 可以有效降低开发难度,提高开发效率。VxWorks 已经被广
泛地应用在通信、军事、航空、航天等高精尖技术领域中,应用实例包括美国的 F-16、FA-18
战斗机、B-2 隐形轰炸机、火星探测器、爱国者导弹等【3】。
2 多任务并行 IEEE1394 系统设计
实时系统一定是多任务的,但多任务不一定是实时的,因此在设计一个稳定且高效的多
任务实时系统时,需要考虑到如下关键技术:任务的划分、任务的设计、任务的优先级设置、
任务间通信机制的选择、中断处理程序的编写以及采用什么样的任务调度策略。本节将从这
些与实时性相关的技术来分析设计 IEEE1394 系统。
IEEE1394 数据传输事务分析
1资助项目:本课题得到高等学校博士学科点专项科研基金(项目编号:200805321029)的资助。
-2-
中国科技论文在线
图 1 IEE1394 异步事务图
IEEE1394 总线具有异步(Asynchronous)和等时(Isoehronous)两种数据传输模式【4】,对应
不同的传输模式 IEEE1394 系统需要处理两类事务:异步事务和等时事务。为了确保可靠的
传输,一次完整的异步事务需要经历两个子事务:请求子事务和响应子事务。如图 1 所示,
请求子事务:请求者用来发起事务(发送请求包)。响应子事务:响应者用来向请求者返回
状态或数据(发送响应包)。每个子事务都存在确认过程,即每次数据包的发送都会收到一
个确认信号,该信号的发送不需要用户参与,但用户可以根据该信号来判断本次子事务是否
成功完成,进而决定是否需要重传。在响应子事务执行比较慢的时候,属于同一事务的两次
子事务之间可能存在其他子事务或是链路层的操作,即子事务分离。将事务分离有助于其他
的节点利用总线执行事务,这样避免了某个节点长时间地占用总线却不执行事务,从而可以
提高总线的利用效率。等时事务由“信道”来划分和标记。发送者将数量不定的数据以规定
的时间间隔向一个简单的地址(这个地址与异步事务中的不同,它是以信道的形式存在的)
发送,这种发送方式类似广播,因此不需要确认信号。接收者可以从自己感兴趣的一个或多
个“信道”接收数据。
通过上述分析,IEEE1394 节点需要处理的数据传输事务有:异步发送请求、异步发送
响应、异步接收请求、异步接收响应、等时发送、等时接收。由芯片厂商 TI 生产的 IEEE1394
链路芯片 TSB82AA2 中实现了 7 个独立的 DMA【5】,其中有 6 个是用于上面这 6 个事务,
使得他们可以互不干扰的独立完成各自的数据传输,另外一个 DMA 专用于总线复位时接收
自标识数据包。由此可见无论是从硬件资源还是系统需求,IEEE1394 都应该由多任务来实
现。
多任务并行模型设计
图 2 IEEE1394 多任务模型
-3-
中国科技论文在线
依据 IEEE1394 系统数据传输事务和总线管理的需求,为多任务并行 IEEE1394 系统设
计了如下主要任务:异步发送请求任务、异步发送响应任务、等时传输管理任务、总线管理
任务、中断延迟处理任务、中断服务程序、异步接收请求任务、异步接收响应任务、等时接
收任务、等时传输任务、总线复位任务。他们之间的协作关系如图 2 所示。
异步发送请求任务、异步发送响应任务:这两个任务负责异步数据的发送,他们通过操
作各自对应的 DMA 控制器来完成数据的发送,所以不存在任何硬件资源的互斥,可以并行
运行。他们都是无限循环任务,首先总是试图从各自的消息队列中获取消息,如果没有消息,
就一直阻塞,不占用 CPU 时间。当获得一个消息时,就解析出消息中的命令,然后根据命
令进行相应的处理。
中断服务程序、中断延迟处理任务:中断服务程序并不是传统意义上的一个任务,但在
此可以将它看成是具有特殊调度方式和实现上受限的一种任务。中断服务程序可以看成是由
硬件来强制调度的优先级最高且不可抢占的任务。它运行时没有上下文,但会影响整个系统
的实时性和可靠性,实现时必须要短小快速,且不可以执行可能会引起阻塞的动作。例如,
它不能获取信号,因如果该信号量不可利用,内核会挂起调用者,当中断被挂起将导致系统
崩溃。然而,在中断服务程序中是可以释放信号或写消息队列等操作。为了提高整个嵌入式
系统的实时性,在本系统的中断服务程序中只做与中断相关的必要处理。在该函数中首先读
取 OHCI 配置空间中的中断寄存器,判断本次中断是否由本设备引起,如果不是就立即退出。
如果是本设备产生的中断,根据中断源做简单的必要的处理:如设置相关的寄存器。然后通
过发送消息的方式激活中断延迟处理任务。中断延迟处理任务是 IEEE1394 系统创建的主要
任务之一,在 IEEE1394 系统创建的所有任务中它的优先级是最高的,但一般应该低于系统
任务的优先级。在该任务中进行更复杂的中断事务的处理,最终根据需要向其他任务发送消
息。如图 2 所示,如果是异步事件(接收到异步请求或异步响应)就创建消息发送到异步接
收请求或是响应任务;如果是等时事件(一段数据传输完毕)就创建消息发送到等时接收或
发送任务。如果是总线复位事件,就发送信号激活总线复位任务。最后循环阻塞到中断延迟
处理消息队列上。
异步接收响应任务、异步接收请求任务:这两个任务负责异步数据的接收,拥有独立的
DMA 控制器,不存在硬件资源互斥访问,可以并行运行。当异步数据到来时,产生异步(接
收请求或响应)中断,由中断延迟处理任务向这两个任务发送消息,然后他们从各自的消息
队列中获得消息返回。异步接收响应任务从响应数据包中解析出该响应事务的子事务标签,
然后根据标签从请求子事务链表中找出与该标签对应的请求子事务。最后执行异步事务完成
操作并通知客户端程序。异步请求事务根据请求的类型会有不同的处理方式。如果是底层可
以处理的请求,如物理数据包,则直接向异步发送响应任务发送消息,如果需要上层处理的
请求,就交给客户程序向其注册的回调函数来处理。
等时接收任务、等时发送任务:这两个任务负责等时数据的处理。他们也是由中断延迟
处理任务来激活。当一定量的等时数据被发送完成或到来时,就会产生等时中断,该任务从
消息队列中返回消息,从消息中解析出命令,调用在相应信道注册的回调函数。回调函数是
由应用程序通过等时传输管理任务注册的。回调函数会对新到来的数据进行处理或者准备好
要传输的新数据。这两个任务还负责对环形缓冲区的数据结构进行更新。
总线复位任务:当发生总线复位时该任务由中断延迟处理任务发送的信号激活,主要功
能为:对自标识(selfID)数据包收集和管理,停止一切异步数据包的传输,清除所有异步传
输队列中的数据包,清除传输 FIFOs,清除所有接收的异步请求包,使得拓扑结构图无效。最
-4-
中国科技论文在线
后向上层通知总线复位事件,即调用上层应用程序注册的复位回调函数。
等时传输管理任务:等时事务并不像异步事务那样经常发生,所以传输和接收 DMA 只
需要一个任务来管理。该任务处理与等时传输相关的命令,包括客户对等时资源的申请和释
放,等时流传输的开始和暂停操作,等时回调函数的设置,还有等时传输的恢复。
总线管理任务:该任务主要执行各种杂项命令,负责总线和节点的管理。完成的功能包
括:总线软复位,发布能被其它节点访问的拓扑结构图,发布能被读取以确定两节点间每个
电缆部分最大速度的速度图,执行循环控制器的工作,执行总线管理控制,执行优化总线传
输的功能。
任务优先级设置
在实时多任务 IEEE1394 子系统中,采用了中断延迟处理任务的技术可以减少 IEEE1394
子系统对整个嵌入式系统和系统中的其它子系统的实时性的影响。采用多任务的方式来实现
IEEE1394 子系统的管理和数据传输后,则可以通过给任务设置不同的优先级以利于操作系
统对任务的调度,进而获得不同服务质量的数据传输,可以保证 IEEE1394 子系统自身的某
些任务和某些命令的执行具有稳定可靠的实时性。
对于等时传输,一旦它获得了总线带宽后,在每个固定的时间间隔(125us)内都会存
在数据传输;而对于异步事务,它可以分离成子事务,子事务之间还可以存在其他事务。所
以等时传输相对于异步传输具有更高的实时要求,那么在设置等时传输任务的优先级时就应
该高于异步传输任务的优先级。一般情况下,数据的接收比发送更具有紧迫性,同时相对于
请求应该优先处理响应,因此 IEEE1394 的异步传输的各任务优先级由高到低为:异步接收
响应、异步发送响应、异步接收请求、异步发送请求。其它控制和管理任务应该高于数据传
输任务。
在 VxWorks 系统中所有应用任务的优先级应该在 100-250 之间【3】;但是驱动程序支持
的任务(与中断服务程序关联的任务)优先级能够位于 51-99。根据上述分析,多任务并行
IEEE1394 协议栈的处理任务的优先级设置如表 1所示。
表 1 IEEE1394 协议栈的任务优先级
任务 优先级 任务 优先级
中断延迟处理任务 50 等时发送任务 61
总线管理任务 51 异步接收响应 70
等时传输管理任务 51 异步发送响应 71
总线复位任务 52 异步接收请求 72
等时接收任务 60 异步发送请求 73
3 VxWorks 下的实现
系统实现模式
-5-
中国科技论文在线
图 3 IEEE1394 系统层次图
VxWorks 从效率和实时方面的考虑,对于整个系统并不分内核空间和用户空间,设备
驱动和应用都运行于同一空间,相互之间的内存都可以访问,使得数据交换和任务切换非常
的高效和方便。基于上述特色,VxWorks 除了可以通过标准的 I/O 系统来实现设备驱动外,
还可以以一种新的方式来实现:把设备驱动程序作为独立任务来实现,直接在顶层任务中实
现硬件操作,完成特有的专用驱动程序。
多任务 IEEE1394 系统就是以这种新的设备驱动方式实现,如图 3 所示,系统包含 Link
Driver 层、Firewire Kernel 层、Client Driver 层和 OS API Wrapper 模块。每一层以函数接口
的方式为另一层提供相应服务。
OS API Wrapper 模块是出于系统可移植性和方便系统调试而单独设计的一个模块。该
模块主要是对系统接口函数的封装(也叫包裹函数)。如:系统中用于 DMA 访问的内存的
分配函数 cacheDmaMalloc 封装为 FWAllocateDMASafe,在该包裹函数中可以对申请异常进
行处理,还可以对申请到的内存进行初始化,当移植到其他系统中时,则只需要修改该包裹
函数。
Link Driver层通过对PCI配置空间和OHCI寄存器空间的读写来完成对链路和物理芯片
的控制,进而实现数据的传输。
Firewire Kernel 层是多任务 IEEE1394 协议栈的核心部分,需要处理与 IEEE1394 协议相
关的事务和总线管理。该部分由上一节中设计的多个相互协作的任务来实现。以函数接口的
方式为上层提供服务,该接口函数则以消息的方式向相应的处理任务发送命令,如FWWrite()
接口函数用于向 1394 总线上其他节点发送数据。
Client Driver 层是基于 IEEE1394 的应用驱动。在本系统中实现了基于 DV 和 SBP2 磁盘
的应用驱动。其中 DV 主要是采用 IEEE1394 的等时传输获取实时视频数据,SBP2 磁盘主
要是利用 IEEE1394 的异步事务传输进行数据的存储。
数据发送与接收过程
IEEE1394 数据包的接收和发送是由 7 个独立的 DMA 来完成。DMA 从哪里取数据发送
和将接收的数据存储到哪里则是由命令描述符(command descriptor)来控制。多个命令描
述符形成一个 DMA 上下文程序(Context program)即命令描述符链表。上下文程序由程序
员构造存储在内存中,DMA 控制器通过其相应的命令地址寄存器来发现上下文程序。程序
员可以通过 DMA 控制器的命令控制寄存器来控制 DMA 从上下文程序中获取命令描述符,
同时通过其返回的事务代码来指示传输的状态和结果。
-6-
中国科技论文在线
发送数据时,首先申请一段内存作为命令描述符,该段内存必须是适用于 DMA 的,使
用 cacheDmaMalloc 函数申请。然后依据 DMA 描述符和 IEEE1394 数据包的格式填充该段内
存。最后将描述符链接到相应的 DMA 描述符链表上。DMA 描述符链表必须互斥访问,对
它操作时首先调用 intLock 函数来禁止中断函数对其操作,然后还需要将 DMA 控制寄存器
的 RUN 位设置为 0 使得其对应的 DMA 也停止操作。描述符链表操作完后,重新设置 DMA
控制器并恢复中断。
由于不知道何时会发生数据接收,所以数据接收与发送的 DMA 描述符链表处理方式存
在很大的差异。在系统初始化时首先需要申请一块非缓存的内存作为数据接收环形缓冲区,
然后还需要构造一个环形描述符链表来指向这段环形缓冲区。当有数据包到来时,DMA 将
数据存入命令描述符指向的数据缓冲区中,然后产生中断,在中断程序中要分别对数据接收
环形缓冲区和环形描述符链表进行处理。
4 应用测试
根据本文的设计在 VxWorks 系统上实现了多任务并行 IEEE1394 协议栈,并在其上实现
了基于该协议栈的数字视频解码与 SBP2 移动存储应用。运行环境为采用 MPC7448 微处理
器的嵌入式硬件平台,IEEE1394 链路层和物理层的控制芯片分别选用 TI 生产的 TSB82AA2
和 TSB81BA3。数字视频解码测试过程为:首先通过 IEEE1394 总线从 1394DV 摄像机(数据
传输速率为 400Mb/s)获取高质量的视频数据,然后对其解码并在显示器端显示。测试结果
表明每秒可以解码并显示 27 帧的 640×480×24 的视频图像。SBP2 移动存储测试过程为:
测试平台通过 IEEE1394 总线与 SBP2 移动磁盘(400Mb/s)连接,将磁盘中的文件读出后再写
回磁盘。测试结果表明数据传输的平均速度可以达到 32MB/s。
5 总结
以多任务的方式来实现驱动及应用系统是顺应嵌入式系统发展需求,在多任务环境中可
以通过灵活的任务优先级设置获得不同的服务质量。本文从军工嵌入式领域需求出发,充分
利用 IEEE1393 标准的软硬件特色和 VxWorks 对多任务机制的优异支持,设计并实现了多任
务 IEEE1394 协议栈及其应用系统。测试结果表明该系统已经可以满足工程应用需求,进一
步工作则可以采用更细化的任务调度算法和优先级消息队列来提高系统的实时和稳定性。本
文中采用的多任务并行系统设计与实现方法,对其他具有实时要求系统的驱动及应用程序具
有一定的借鉴作用。
参考文献
[ 1] IEEE1394. Standard for a High Performance Serial Bus. Institute of Electrical and Electronic
Engineers ,1995.
[2] 1394 Trade Association. http: / /www. 1394 ta. org[ EB /OL ].
[3]罗国庆. VxWorks 与嵌入式软件开发[M ]. 北京: 机械工业出版社, 2004.
[4]张大朴,王晓,张大为,等.IEEE 1394 协议及接口设计[M].西安:西安电子科技大学出版社,2004.
[5]TSB82AA2 Data Manual[Z]. Texas Instruments Inc.. 2001-07.
-7-
中国科技论文在线
Design and implementation of multi-tasking and parallel
IEEE1394 protocol Based on VxWorks
Dai Jiangbo,Tan Huailiang,Liang Xu
School of Computer and Communication, Hunan University, Changsha (410082)
Abstract
In order to meet the military embedded systems for high reliability and real-time requirements,By
analyzing the hardware and software features of IEEE1394 bus,in this paper proposed and designed a
multi-task and parallel IEEE1394 protocol stack then, achieved applications of Digital
Video Decoding and SBP2 (Serial Bus Protocol 2) Mobile Storage based on the multi-task and parallel
IEEE1394 protocol in VxWorks results show that it meets the basic application
requirements of the military.
Keywords:IEEE1394;VxWorks;multi-task;embedded
作者简介:
代江波(1983-),男,硕士研究生,学位(或目前学历),主要研究领域为嵌入式系统及应用、网
络存储;谭怀亮(1969-),男,博士,湖南大学副教授、硕士生导师,主要研究领域为网络存储、嵌
入式系统及应用;梁旭(1986-),男,硕士研究生,嵌入式系统及应用