手机版

基于VxWorks和MC68332的变电站测控系统驱动程序设计(3)

发布时间:2021-06-07   来源:未知    
字号:

单片机

.78.电力系统保护与控制

2.2VxWorksI/0系统驱动程序框架

VxWorks为各种设备(包括字符设备、块设备、虚拟设备及网络设备)提供统一的访问接口,包括七种基本的I/O函数:open(filename、flags、mode),create(filename、flags),read(fd、&buf、nBytes),write(fd、&buf、nBytes),ioctl(fd、command、arg),close(fd)及remove(filename)。I/O系统所起的作用就是,把用户请求分配到与设备对应的驱动例程中去。VxWorks系统中有一个驱动程序列表,其形式如表2所列。

表2设备驱动程序列表

Tab.2Listofdevicedriver

驱动

creatererrlOVeopenclosereadwrlteioetl号码

caOpenNULLcaOpencaClosecaReadcaWritecaIoctl

I/O系统可动态调用iosDrvlnstall0函数将设备的驱动例程(即XXOpen0、XXClose0、XXRead()等加入到设备驱动列表中,同样,系统中有一个设备列表,每个设备对应于设备列表中的一项,每一项包括设备名称和设备驱动号,同时包括一个设备描述的结构。该结构第一个变量是DEV—HDR类型的变量DEV—HDR。

DEV—HDR的定义如下:

Typedefstruct{

DL_NODEnode:/★设备列表节点★/

shortdrvNum;/★驱动号码。/

char*name;P设备笔’|

}DEV—HDR;

系统调用iosDevAdd0,可以将设备加入到设备列表中。系统中将驱动和设备联系起来的就是文件描述符列表,每个文件描述符列表除了包括驱动号、设备ID外,还包括文件名、可用标志和指向DEV_HDR的指针。系统每次成功执行open(),返回一个文件描述符,这样对于设备的read()、write()及ioctl()就可以通过文件描述符进行。文件描述符表(调试时调用iosFdShowO查看)如下:系统启动时(一般挂接在usrroot0),XXDrv()和XXDevCreade0便将设备及其驱动加入相应的列表中。

2.3设备驱动程序的访问过程

CAN驱动程序的访问过程。(设备名‘'/can/1”并且以CAN设备驱动程序为例,上述中的XX在这里用Can代替。)

①open(“/cardl”,O—RDWR,0644)

②I/O系统在设备列表中寻找设备名为/can/1

的设备项,找到相应的设备驱动号。

⑧I/0系统在文件描述符中保留一个文件描述符空间。

④I/0系统在设备驱动列表中找到对应的CanOpen(CAN—DEV*PCAN—DEV,UBYTE’remainder,intflags),该驱动例程返回设备描述符的指针。

⑤I/O系统将设备描述符的指针存储在文件描述符列表的DeviceID,同时将对应的设备驱动号存储在文件描述符的Driverhum项。最后I/o系统返回该描述符项的索引(即为fd)⑥这样应用程序中的read()和write()等函数调用就可以根据fd找到相应的设备驱动号,进而找到相应的驱动例程。2.4CAN驱动程序的实现

CAN驱动程序的实现即是完成下面6个函数与1个结构体的编写。下面简要介绍其完成的功能,并用伪指令进行说明。

intdrv—num;/★驱动号码。/

typedefstruct{

DEV_HDRPcanhdr:广这个数据结构必须放在设备描述符的最初部分‘/

………………………/.其余与驱动有关数据’/

lCAN_DEV;/*CAN设备描述符+/

CAN_DEVCall—.chan_dev;

STATUSCanDrv(void){

完成驱动的一些初始化;

intconnect0;/★连接所选的IRQ与中断处理函数+,

sysIntEnablePIC();/*68332允许中断+/

drv—num=iosDrvlnstall(CanOpen,NULL,CanOpen,CanClose,CanRead,CanWrite,CanIoctl);/★将设备驱动例程装入设备列表中’/

/*iosDrvlnstallO将设备的CAN驱动例程加入设备驱动列表中,7个参数为7个驱动例程的进入点(entrypoint),如果没有某个例程,则传递NULL。‘/

STATUSCanDevCreate(){

完成一些设备初始化;

iosDevAdd(&Can_chan_dev.pCANHDR,"carlO”,drv—num);/★将设备放入设备驱动列表中木/

intCanOpen(CAN_DEV.半pCan_Dev,UBYTE

木remainder,intflags){

CAN卡硬件复位

CAN卡关中断

CAN卡进入软件复位模式

万方数据

基于VxWorks和MC68332的变电站测控系统驱动程序设计(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)