《VxWorks设备驱动开发详解》笔记——第六章 字符设备驱动+第七章 串口驱动

第六章 字符设备驱动

1.字符设备以字节流的方式对数据进行操作,数据只能顺序读写。I2C、SPI、UART等接口类型的设备都可以作为字符设备进行驱动;

2.对于UART设备,建议使用TTY中间层作为缓冲,以提高设备使用率;

3.SPI的4根信号线:数据输出线SDOUT、数据输入线SDIN、片选SCS、时钟SCK。SPI是一种全双工的通信工作模式;

4.底层驱动只能提供一种机制,策略需要由用户自己选择。

第七章 串口驱动

1.串口是一种常用的、典型的字符设备。因其常用,所以VxWorks在IO子系统层之下提供了一个TTY内核驱动中间层,用于管理串口驱动;

2.TTY中间层存在的必要性:VxWorks将底层驱动中维护的读写缓冲区从底层驱动中分离出来,改由内核本身进行维护,这个进行维护的模块就是TTY中间层。其管理本来应由底层驱动管理的数据读写缓冲区,提供回调函数供底层驱动从缓冲区中读数据以及将从硬件接收的数据缓存入缓冲区中;

3.TTY中间层与底层串口驱动之间的关系:

  • TTY中间层向底层驱动提供两个内核缓冲区读写函数,使得底层驱动可以从TTY层读取需要通过串口发送的数据以及向TTY层写入从串口设备接收的数据;
  • 底层驱动向TTY中间层提供一个数据发送触发函数,从而使得当内核写缓冲区从空变为非空时,可以通知到底层驱动,将这些新存入的数据发送出去。(注意:要求底层驱动发送触发函数和实际数据发送函数在实现上必须做到:一旦被触发,那就必须将写缓冲区中已存在的所有数据,包括在发送过程中写入的数据都发送完毕。只有当getchar()返回空时,才结束本次发送操作)

4.底层驱动中自定义数据结构中成员的确定是在驱动编写的过程中不断完善的,有些成员要到实际代码编写后才能确定,有时为了实现某种功能,需要添加一个变量进行配合,这时就需要考虑到底是以全局变量还是成员变量的形式存在,可能需要对原先定义的结构增添、更改或删除成员。因此,驱动自定义数据结构体的设计很少一蹴而就;

5.轮询是一种盲目的消耗资源方式,与轮询相比,中断是一种事件通知机制。当发生一个中断时,一定是某个条件得到满足,而发生一次轮询时,可以什么事都没发生;

6.对于串口设备(以及其他大多数设备),中断通常有3种来源:

  • 设备接收到新数据;
  • 设备已发送完需发送的数据;
  • 设备在数据收发过程中发生了错误;

 

-

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章