CAN卡开中断和进入操作模式
Return((int)pCan_Dev); /*注意必须返回设备描述结构指针*/
}
int CanRead(int CAN_DEV_ID,UBYTE * buf,int nBytes){
等待信号量(该信号量由中断处理例程释放)
从接收缓冲区读取数据
释放接收缓冲
返回接收数据数量
}
int CanWrite(int CAN_DEV_ID,UBYTE* buf,int nbyte){
查询发送缓冲是否可用
向发送缓冲区写数据
命令发送
查询发送完成标志
返回发送数据数量
}
void interrupt_handle_routin(int arg){
处理中断事件
发送(释放)信号量
}
限于篇幅,其它函数略。
图3 I/O系统整体结构
5 CAN驱动调试
硬件驱动的调试是件十分麻烦的事,经验十分重要。这里简要介绍几个帮助调试的函数。
①可以调用iosDrvShow()、iosDevShow()及iosFdShow()查看相关内容,判断并将驱动及设备中入相应列表。
②使用logMsg()现实相关内容,以定位错误。
初期调试,示波器和信号灯是非常有用的,可以确定硬件的工作状况,从而有助于发现程序中的错误。
6 小结
笔者采用两种方式完成了CAN卡驱动。相对于第一种(笔者亦完成),第二种方式——VxWorks的I/O系统将设备程序作为内核过程实现,大大减少了系统的开销,实时性和可靠性有了很大的提高,并且为用户提供了统一的接口,使用十分方便。
开发驱动程序,辅助工具是非常有用的。Windows下的开发工具就比较多,而在VxWorks下开发驱动的工具相对较少。Windriver是一款不错的开发工具,可以开发VxWorks下的驱动程序(也可以开发其它操作系统下的驱动程序)。正确、熟练地使用这些辅助工具,会使开发工作事半功倍。
本文关键字:程序设计 嵌入式系统-技术,单片机-工控设备 - 嵌入式系统-技术