spi 的同步和异步传输
spi_async spi_sync
先看 spi_sync
 return __spi_sync(spi, message, 0);
  DECLARE_COMPLETION_ONSTACK(done);
  status = __spi_queued_transfer(spi, message, false);//注意这个false
   list_add_tail(&msg->queue, &master->queue);
  __spi_pump_messages(master, false);//注意这个false
   queue_kthread_work(&master->kworker, &master->pump_messages);
  wait_for_completion(&done);
再看 spi_async
spi_async
 ret = __spi_async(spi, message);
  return master->transfer(spi, message);//注意: master->transfer = spi_queued_transfer;
   return __spi_queued_transfer(spi, msg, true);
    list_add_tail(&msg->queue, &master->queue);
    queue_kthread_work(&master->kworker, &master->pump_messages);  

可以看到
async的spi传输 直接用过工作队列启动work,不进行阻塞
sync的 spi传输通过 wait_for_completion 进行睡眠等待传输完成 通过一个 void complete(struct completion *c);来进行唤醒
这个 message->complete = spi_complete; 在spi_finalize_current_message中被调用 这个完成量为 message->context = &done;
done指示等待的事件是否完成。初始化时为0。如果为0,则表示等待的事件未完成。大于0表示等待的事件已经完成

spi sync async相关推荐

  1. Blocking/Non-Blocking VS Sync/Async VS Overlapped

    [转载请注明:出自cnblogs,作者:byeyear,Email:east3@163.com] [2012.10.08: 完善文章内容] 本文主要讨论几个在网络编程中经常被讨论但也经常被误解的概念: ...

  2. java sync和async区别_GCD中串行、并行与async、sync的区别

    * author:conowen@大钟 * E-mail:conowen@hotmail.com 队列由一个或多个任务组成,当这些任务要开始执行时,系统会分别把他们分配到某个线程上去执行. 串行队列. ...

  3. 和菜鸟一起学linux总线驱动之初识spi驱动数据传输流程【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/7921846 对于SPI的一些结构体都有所了解之后呢,那么再去瞧瞧SPI的那些长见的操作 ...

  4. C# 5.0功能之Async一瞥

    原文: http://www.cnblogs.com/xiaomi7732/archive/2011/06/27/AsyncDemo.html 距离微软发布 Async CTP 已经有个把月了吧,周围 ...

  5. oracle12C--DG FAR SYNC 部署(前提为搭建好12C的DG)

    <<往期12CDG搭建>> 一,理解同步异步模式 01, 使用LGWR 进程的SYNC 方式 1)Primary Database 产生的Redo 日志要同时写到日志文件和网络 ...

  6. 一文读懂Rust的async

    一文读懂Rust的async 不同的编程语言表现异步编程的方式可能不一样,Rust跟JavaScript的async/await类似:使用的关键字啊,编程模型啊都差不多啦! 也有些不一样的地方,毕竟R ...

  7. node.js async循环数组的方法

    Collections 集合处理 async.forEachOf  |  eachOf(object, iterator, callback) 实现功能:遍历object对象执行iterator,报错 ...

  8. devices-list

    转自:https://www.kernel.org/pub/linux/docs/lanana/device-list/devices-2.6.txt LINUX ALLOCATED DEVICES ...

  9. linux 字符设备号分配状况

    字符设备主设备号范围 早期的内核字符主设备分配范围为0~255,后来由于不够用,对字符主设备号分配范围扩充到0~511,按照动态和静态申请划分情况使用,按照0~255和256~511两段进行详细划分, ...

最新文章

  1. org.apache.ibatis.binding.BindingException原因总结
  2. Nosql数据库之mongodb c++使用实例
  3. Java自动拆装箱面试_跟王老师学泛型(二):Java自动装箱与拆箱
  4. 纯粹数学:哈代的世外桃源
  5. RuoYi-Cloud 部署篇_03(linux环境 Oracle +nginx版本)
  6. 在Android NDK下打印log
  7. Ui学习笔记---EasyUI的EasyLoader组件源码分析
  8. Leetcode 814.二叉树剪枝
  9. 嵌入式开发 ARM Cortex-M3处理器技术优势分析
  10. dirent--文件以及文件夹相关操作(跨平台)
  11. libFetion『Linux下都飞信』
  12. 数列区间询问中的分块思想CF86D,BC#22-1004-NPY and girls
  13. C++ 重新定义继承而来的非虚函数
  14. TDS水质及电导率计算方法及电路程序设计
  15. 七缸发动机预热,docker swarm + .net core 高速飙车成功
  16. 广色域图片Android,广色域手机很厉害?其实安卓手机屏幕的色彩问题一
  17. Kotlin学习(1)初识及环境搭建,大厂面试必备技能
  18. MySQL5.7官方下载链接导航
  19. 如何使用 Victoria 检测并修复硬盘坏道和坏扇区
  20. CAE-仿真案例学习

热门文章

  1. js鼠标拖拽移动盒子但只在父框内移动(三种写法)
  2. 关于嵌入式驱动开发,这篇文章让你了解透彻!
  3. 【开源电机驱动】速度环控制
  4. SQL 压力测试实战
  5. mosquitto出现由于目标计算机积极拒绝,无法连接
  6. RACI职责分配矩阵模型使用详解及案例分析
  7. 袁宝华 oracle,关键词优化难易分析_SEO优化难度分析 - 站长工具
  8. 机器学习实验室讲座 总结报告
  9. 1447D Catching Cheaters
  10. TLV自定义通信协议的编码和解析