查看: 1589|回复: 2

[其他] 每天解决一个问题12天 :阻塞与非阻塞

[复制链接]
  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
    发表于 2015-9-5 18:07:29 | 显示全部楼层 |阅读模式
    本帖最后由 lkl0305 于 2015-9-5 23:44 编辑

    给大家分享一个基本的问题——阻塞与非阻塞。

    ============================================================

    一、问题描述:
    在KSDK库函数的串口驱动里,有关于串口发送、接收的函数,都是两两出现的:
    3737.jpg

    3738.jpg
    上面2个函数都是串口发送数据,一个是阻塞模式,一个是非阻塞模式,它们有什么区别呢?

    二、解决办法:
    当然要去问度娘了
    经过查找,写写自己的一些看法:
    1、阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。比如说:程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。
    2、非阻塞函数操作则可以立即完成。比如说:程序执行一个读数据的函数调用,虽然函数调用完成,但操作并没有完成,需要进一步判断状态才可以确定操作是否完成。
    那两者有什么特点呢?打个比方:

    大家在中午去食堂就餐,你点了一份菜后,厨师做菜需要一定时间,那这段时间你如何做呢?
    (1)你可以站在窗口前等着厨师把菜做好,当然这段时间你只能等待,不能做其他事情。这就是阻塞模式。
    (2)你也可以找个位置坐下来玩手机,看电视等。那怎么知道你的菜好了没有呢?你只需要过一会去看看嘛。这就是非阻塞模式。


    来看看这个串口阻塞和非阻塞的使用:

    阻塞模式:
    当执行第一个发送数据后,立刻可以发送第二个。因为阻塞模式下,函数执行完后,必然数据发送完毕。
    3735.jpg
    非阻塞模式:
    当地一个数据发送完后,需要判断发送状态,如果状态显示完成,才可以发送下一数据。当然,如果没有发送完成,可以在判断状态的while循环中写上需要执行的代码。这样在等待的过程中也可以做些其它事情。
    3736.jpg

    三、感想与收获:
    在KSDK1.2库中,阻塞和非阻塞函数使用的非常多,除了这里,还有很多,比如I2C、SPI等等,包括使用上DMA后的。
    因此,理解这个概念还是非常重要的!!
    lpsci的DMA发送数据
    3739.jpg
    3740.jpg
    lpsci的DMA接收数据
    3741.jpg
    3742.jpg

    I2C主机发送数据
    3743.jpg
    3744.jpg

    SPI主机传输数据
    3745.jpg
    3746.jpg




    我知道答案 目前已有2人回答
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-9 14:16
  • 签到天数: 17 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    25

    主题

    1785

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2250
    最后登录
    2024-6-11
    发表于 2015-9-6 01:19:41 | 显示全部楼层
    学习了。。。
    freescaleic.org.png
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16701
    最后登录
    1970-1-1
     楼主| 发表于 2015-9-7 11:47:45 | 显示全部楼层

    共同学习
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-20 23:29 , Processed in 0.150889 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表