实时操作系统VxWorks在跟踪雷达系统中的应用
if(taskSpawn(″intProcGate″,60,0,2048,(FUNCPTR)intProcGate,0,0,0,0,0,0,0,0,0,0) == ERROR)
......
messageHandle ();
return (OK);
}
信号处理板通过PCI总线和CPU板相连。在系统上电后,VxWorks对信号处理板进行一系列必要的初始化。首先在硬件初始化函数sysHwInit()里,调用pciConfigLibInit()来选择PCI设备的配置机制Mechanism #1或Mechanism #2,接着调用pciConfigLibInit()对PCI设备中断进行初始化,建立中断链表。这两个步骤对PCI做了最基本的配置,随后的一些PCI配置都以它们为基础。随着系统初始化的继续,在另一个硬件初始化函数sysHwInit2()里,调用了sysPciAutoConfig(),这个函数对PCI设备做了进一步的初始化。首先,它逐个查找PCI设备,先查找0号总线上的所有设备,一旦查到PCI-PCI桥设备,立即顺着这个桥向下扩展,直到查完所有总线上的所有设备为止。查找过程中,这个函数对一些在总线上慢显现的设备作了一些特殊的等待处理。这会减慢系统启动的速度,若需要,用户可以通过修改内核源程序来避免等待。当确定了所有的设备后,函数再次查找一遍设备。这次,它创建一个PCI设备列表,把所有的设备都存到列表中。然后,函数根据这个列表,对每个设备做一些配置。它根据设备硬件上的设置映射设备存储空间和I/O空间,分配中断向量等,图4中的PCI映射存储器空间就是这样映射的。然后,系统还对一些特殊的PCI设备做相应的配置。到此为止,系统对PCI设备的初始化工作就结束了。用户了解这些配置后,就可以在应用程序里对自己的PCI设备进行访问了。
操作系统启动后,开始执行usrAppInit()。这个函数的内容由用户自己编写,它完成用户所需的功能。在本系统中,因为程序不知道哪个槽上有哪种信号处理板,所以程序首先按槽号逐个查找一遍,以确定哪个槽有信号处理板;然后读出设备的PCI映射存储空间地址,以便对信号处理板进行读写,同时读出中断线的内容,进而通过pciIntConnect()来挂中断。pciIntConnect()函数考虑了PCI设备对中断资源的共享,这样不会破坏共享同一个中断号的其它中断。中断处理使用了信号量机制,处理模式如图5下半部所示。当有中断产生时,中断服务子程序立即响应,它给相应的处理进程发送信号,处理进程即开始工作;在没接收到信号时,处理进程处于等待状态。
STATUS dspISR ()
{
......
switch (intType)
{
case INT_20MS: /* INT_20MS=1 */
......
semGive (sem20ms);
break;
case INT_ACQGATE: /* INT_ACQGATE=2 */
......
semGive (semAcqGate);
break;
default:
......
break;
}
......
}
void intProc20ms()
{
......
FOREVER
{
semTake (sem20ms, WAIT_FOREVER);
......
}
......
}
void intProcGate ()
{
......
FOREVER
{
semTake (semAcqGate, WAIT_FOREVER);
......
}
......
}
网络通讯程序使用SOCKET机制,因为通讯只涉及到一个小局域网,所以传输层采取UDP协议。程序中创建了一组消息队列,接收进程不停地接收SOCKET传来的数据和命令,然后判断它们的类型,再分别存放到不同消息队列中,等待处理进程的处理,如图5上半部所示。处理进程的一个主要功能是将接收到的数据和命令按照规定的格式组合成命令字,传给信号处理板。另外,信号处理板处理完一批数据后,若向网上传送数据,则需要先发出中断,中断服务程序通知处理进程,把数据通过网络传给其它子系统。
这样,信号处理板和网络之间就能够顺利地通讯了。主控计算机可以通过网络实时地向信号处理板发送各种命令和数据,同时信号处理板也可将数据通过网络实时地传送给其它子系统。
信号处理子系统的程序开发是基于BSP的cpv5000,它为PCI设备提供非常好的支持,使得开发者对PCI设备的访问变得非常轻松,VxWorks的网络功能也很健全,网络通讯易于实现。另外,VxWorks的多任务性及丰富的进程通讯机制为实现复杂的功能提供了必要的手段。本文中提到的所有功能都已在具体的项目中实现,VxWorks稳定可靠,实时性完全满足项目的需要。
- VxWorks实时操作系统下MPC8260ATM驱动的实现(11-11)
- Linux内核解读入门(11-09)
- Linux操作系统网络驱动程序编写(04-11)
- Linux系统对ISA总线DMA的实现(06-19)
- 基于MPEG-4的嵌入式多媒体监控系统中压缩/解压卡的设计与实现(10-15)
- Windows CE下驱动程序开发基础(04-10)