spi数据传输队列简述
来源:互联网 发布:淘宝售前客服工作流程 编辑:程序博客网 时间:2024/06/05 18:16
spi数据传输分为同步、异步两种:
同步方式是指数据发出后一直等待成功;
异步方式是指数据发出后不用等待成功,设置传输成功回调函数提醒发送成功;
问题:在异步方式情况下,如下状况,如何解决?
对于同一个数据发送者,当上一次spi_message还没有发送完成的情况下,如何发送下一个
spi_message
答案:引入队列,将等待传输的spi_message放入一个等待队列中,系统不断检测队列是否为空;
-------------------------------------------------------------------
spi_transfer 队列化 :
struct spi_transfer {
......
const void *tx_buf;
void *rx_buf;
......
struct list_head transfer_list;//链表头
};
struct spi_message {
struct list_head transfers; //挂接在本 message下的transfers链表头
void (*complete)(void *context); //传输完成 回调函数
struct spi_device *spi;
......
struct list_head queue; //挂接等待传输的spi_mastert
......
};
//将需要传输的spi_transfer 挂接添加在 spi_message transfers链表下
spi_message_add_tail(struct spi_transfer *t, struct spi_message *m)
//spi 核心层的数据传输以一个 spi_message 为单位,
transfer_one_message
---------------------------------------------------------------------------------
spi_message的队列化 :
多个 spi_mastert 申请传输的时候, 等待的传输spi_mastert被挂接在 控制器spi_mastert的
queue队列下;
发起 spi_mastert 传输:异步传输
spi_async(struct spi_device *spi, struct spi_message *message);
spi_async 会发起一个 异步传输,将spi_message结构挂接在 spi_message的queue字段下,
然后启动专门为spi传输准备的内核工作线程,一般情况下,当这个工作线程被唤醒的时候,
spi_message queue队列下已经挂接了多个spi_message等待传输,每一个spi_messag传送完
成之后,会调用 complete 回调函数提示本次 spi_message 传输完成,叫下一个,
--------------------------------------------------------------------------------------------
总结: spi传输数据是以 spi_message 为单位的,我们需要传输的内容在 spi_transfer 中
1 : 将本次需要传输的 spi_transfer 以 spi_transfer->transfer_list为链表项,连接成一个
transfer_list链表,挂接在本次传输的spi_message spi_message->transfers链表下;
2 : 将所有等待传输的 spi_message 以 spi_message->queue 为链表项,连接成个链表挂接在queue下
同步方式是指数据发出后一直等待成功;
异步方式是指数据发出后不用等待成功,设置传输成功回调函数提醒发送成功;
问题:在异步方式情况下,如下状况,如何解决?
对于同一个数据发送者,当上一次spi_message还没有发送完成的情况下,如何发送下一个
spi_message
答案:引入队列,将等待传输的spi_message放入一个等待队列中,系统不断检测队列是否为空;
-------------------------------------------------------------------
spi_transfer 队列化 :
struct spi_transfer {
......
const void *tx_buf;
void *rx_buf;
......
struct list_head transfer_list;//链表头
};
struct spi_message {
struct list_head transfers; //挂接在本 message下的transfers链表头
void (*complete)(void *context); //传输完成 回调函数
struct spi_device *spi;
......
struct list_head queue; //挂接等待传输的spi_mastert
......
};
//将需要传输的spi_transfer 挂接添加在 spi_message transfers链表下
spi_message_add_tail(struct spi_transfer *t, struct spi_message *m)
//spi 核心层的数据传输以一个 spi_message 为单位,
transfer_one_message
---------------------------------------------------------------------------------
spi_message的队列化 :
多个 spi_mastert 申请传输的时候, 等待的传输spi_mastert被挂接在 控制器spi_mastert的
queue队列下;
发起 spi_mastert 传输:异步传输
spi_async(struct spi_device *spi, struct spi_message *message);
spi_async 会发起一个 异步传输,将spi_message结构挂接在 spi_message的queue字段下,
然后启动专门为spi传输准备的内核工作线程,一般情况下,当这个工作线程被唤醒的时候,
spi_message queue队列下已经挂接了多个spi_message等待传输,每一个spi_messag传送完
成之后,会调用 complete 回调函数提示本次 spi_message 传输完成,叫下一个,
--------------------------------------------------------------------------------------------
总结: spi传输数据是以 spi_message 为单位的,我们需要传输的内容在 spi_transfer 中
1 : 将本次需要传输的 spi_transfer 以 spi_transfer->transfer_list为链表项,连接成一个
transfer_list链表,挂接在本次传输的spi_message spi_message->transfers链表下;
2 : 将所有等待传输的 spi_message 以 spi_message->queue 为链表项,连接成个链表挂接在queue下
阅读全文
0 0
- spi数据传输队列简述
- SPI数据传输
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- 转载:Linux SPI总线和设备驱动架构之四:SPI数据传输的队列化
- spi驱动数据传输流程
- 蓝牙数据传输过程简述
- AB1601快速SPI数据传输程序
- SylixOS里NUC970平台SPI总线数据传输
- 单调队列简述
- beanstalkd队列简述
- Js获取当前日期时间及其它操作
- Intent 2
- responseWriter()
- 使用Nginx实现反向代理
- Nvidia_GPU驱动安装
- spi数据传输队列简述
- hibernate 创建 MySQL 数据库的 collation 字符序问题
- java将一个List赋值给另一个List相关问题
- pjax中一些js插件不生效的解决办法
- SEO优化针对问题进行分析
- linux配置环境变量PATH
- 查看PostgreSQL数据库中的锁等待--脚本
- 无缝轮播
- 修正由于系统字体变化导致的app界面变形