4 驱动程序的实现
4.1 中断程序的实现
中断程序的实现上使用了上、下两半部机制,上半部是中断处理函数,下半部是中断处理任务,上、下两半部使用信号量进行同步,其中功能性的操作主要安排在中断处理任务中。其程序框架如图5所示。在中断任务中实现对数据缓冲区的操作及缓冲区标志操作,实现操作的过程中着重解决与ioctrl方法和read方法进行同步。
4.2 驱动程序ioctrl方法的实现
驱动程序的ioctrl 方法在驱动程序中具有重要地位,它除了要实现从板功能寄存器的设置及驱动程序的查询机制外,还要实现用户信号处理函数的注册工作,结合这些功能实现的ioctrl方法的框架代码如下所示。
整个的ioctl方法由switch结构组成,这样的结构代码简单明了,易读性和可维护性都很好,同时可以方便地通过扩充命令的方法来实现对从板功能寄存器多种多样的操作,便于驱动程序的重用。
4.3 驱动程序read方法的实现
驱动程序的read方法主要实现对缓冲区数据的读取,同时它是实现数据阻塞操作的关键,read方法的程序流程图如图6所示。
函数首先进行参数的检查及转化;然后检查缓冲区标志,如果缓冲区存在数据则直接读出数据,如果缓冲区没有数据,函数就会申请缓冲区的信号量而使任务处于挂起状态,当中断处理任务处理完缓冲区后会发送一个信号量而使任务重新运行并且读出缓冲区数据;函数是设置缓冲区标志,表示缓冲区数据已经读出。函数要与中断处理任务进行同步;读取和设置缓冲区标志使用原子操作的方法,等待中断处理任务设置缓冲区时使用了信号量的方式完成了同步。
5 VME 总线数据传输测试
VME数据传输测试主要是测试总线数据传输的可靠性,只有总线数据传输的可靠性能够保证,驱动才能稳定的运行,其测试的方法是通过随机地读写从板的随机读写寄存器来完成的,整个测试中为了模拟操作系统在有负载情况下的运行效果,增加了一些定时器操作,其测试的程序流程图如图7所示。
使用这种测试的方法终得到测试的结果如表3所示。从测试结果可以看出,数据传输的准确性比较好,通过阅读VG5-7457PowerPC的板级支持包可以发现其实现VME 数据总线操作的函数都有原子操作过程,以此保证数据传输的可靠性。良好的VME 总线传输特性为驱动的实现提供了良好的基础。
6 结论
设计了基于VxWorks操作系统的VME总线从板的驱动程序框架,着重介绍了驱动程序的机制及这些机制的实现方法;在设计的整体上重点地考虑了驱动程序的可维护性及可移转性。采用这种方式建立起来的驱动程序代码的可读性好,可维护性强,而且可以方便地移植到其他的应用场合。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。