一.延时函数的定义

1.个人理解:通过执行一些无意义的指令,来达到拖延运行下一条指令时间的函数。

二.阻塞延时函数

1.独占性的延时函数,其在运行时,整个系统都将处于停滞的状态。不利于多任务并行,因为用阻塞延时函数的话,因为某一个任务的延时需求,而导致所有的任务都只能眼巴巴的看着,对单片机资源造成极大的浪费,同时也不利于项目的稳定实时运行。

2.例子:

void delay(unsigned int ms)
{unsigned int i,j;for(i=ms;i>0;i--){for(j=124;j>0;j--);}}

此时调用这个函数时,整个单片机都会等着这个函数时间耗完才继续执行。

关键条件指令:for函数

三.非阻塞延时

1.非独立性的延时函数,与阻塞函数相反,不会将整个系统都拉入停滞状态。

2.例子:

#define DELAY_TIME 5000
unsigned int u16_led_cnt;
unsigned int u8_led_delay_flag;int main( )
{
u16_led_cnt=DELAY_TIME;while(1){if(u16_led_cnt){u16_led_cnt--;if(!u16_led_cnt){u8_led_delay_flag=1;}}if(u8_led_delay_flag==1){u8_led_delay_flag=0;u16_led_cnt=DELAY_TIME;task(....);}}
}

靠while(1)大循环,每次都执行一次就出去了,不会阻塞系统其他任务运行

关键条件指令:while,if

3.缺点:

其实非阻塞函数这样操作是非常不精确的,因为while(1)是整个大循环,大循环内任务越多,单次运行时间就越长,基本时基越来越大,这样造成了延时的时间不稳定。

那么我们如何进行均匀,精确的非阻塞延时呢?

答案:定时器,借助硬件定时器来定义出多个软件定时器来满足各个不同任务延时的需求。

下次更新再来一起学习。

单片机阻塞延时与非阻塞延时(1)相关推荐

  1. Linux下同步模式、异步模式、阻塞调用、非阻塞调用总结

    同步和异步:与消息的通知机制有关. 本质区别 现实例子 同步模式 由处理消息者自己去等待消息是否被触发 我去银行办理业务,选择排队等,排到头了就办理. 异步模式 由触发机制来通知处理消息者 我去银行办 ...

  2. 嵌入式驱动之阻塞操作、非阻塞操作

    阻塞 阻塞操作     是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作. 被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足. 非阻塞操作   进 ...

  3. verilog reg赋初值_Verilog语法之六:阻塞赋值与非阻塞赋值

    本文首发于微信公众号"花蚂蚁",想要学习FPGA及Verilog的同学可以关注一下. 一.初步理解阻塞赋值与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式: (1) ...

  4. 让人一看就会的java阻塞队列与非阻塞队列

    队列介绍 今天要来讲一下java里的队列,队列,顾名思义,排队的列,既然按排队形来做的话,生活中的银行排队啊,上车排队啊,都是先到先办理或者先上车,队列存取数据列也一样,这就是先进先出,使用队列的规则 ...

  5. 阻塞队列和非阻塞队列

    1.阻塞队列和非阻塞队列的区别:阻塞队列可以阻塞,非阻塞队列不能阻塞,只能使用队列wait(),notify()进行队列消息传送.而阻塞队列当队列里面没有值时,会阻塞直到有值输入.输入也一样,当队列满 ...

  6. Verilog中阻塞赋值和非阻塞赋值的区别

    Verilog中阻塞赋值(=)和非阻塞赋值(<=)的区别 **阻塞赋值:**前面语句执行完,才可执行下一条语句:即:前面语句的执行(b=a)阻塞了后面语句的执行(c=b).即:always块内, ...

  7. 【Verilog 基础】阻塞赋值和非阻塞赋值的区别

    目录 阻塞赋值 非阻塞赋值 实际工程仿真 阻塞赋值仿真 编写Verilog代码 编写测试文件代码 综合看RTL图 进行实际仿真 非阻塞赋值仿真 编写Verilog代码 编写测试文件代码 综合看RTL图 ...

  8. 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO

    IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...

  9. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  10. 通过举例谈谈阻塞赋值与非阻塞赋值的区别

    这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别? 一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑: 非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值 ...

最新文章

  1. 信号量Semaphore一篇文章叫你明白
  2. 《疯狂JAVA讲义》笔记1
  3. Android应用中的动画详细使用教程
  4. 从helloworld回顾程序的编译过程之三——静态链接
  5. java super实例_Java 的 super 学习的一个实例
  6. python可以做力扣的题吗_力扣周赛 198 - python 解答
  7. 分享:流言终结者——C语言内存管理
  8. python ddos 伪装_Python进行DDOS攻击
  9. paip.输入法编程----一级汉字1000个
  10. 计算机专业大二还学微积分吗,大学最容易挂科的专业,计算机专业绝对排得上前三,其他专业呢?...
  11. 尝鲜ESXi7.0,手工注入LSI MegaRAID 9260-8i驱动,封装iso安装文件
  12. linux的交换空间是什么意思,Linux交换空间是什么
  13. AndroidFTP客户端-FTP管家源码
  14. 干货分享|如何使用小鸟云服务器搭建Wordpress站点
  15. 关于解决Android studio:The emulator process for AVD Pixel_4_XL_API_30 has terminated 以及改变AVD存放位置
  16. 【踩坑】mirai登陆失败反复验证码或提示登录存在安全风险或提示版本过低的解决方法
  17. JavaWeb(狂神老师上课笔记)
  18. Linux命令卸载谷歌浏览器,linux系统安装和卸载google浏览器
  19. 2019第九届中国测绘地理信息技术装备博览会
  20. 打印机无法确认设备和计算机之间的连接,打印机和电脑连接不上怎么办_电脑怎么连接不上打印机设备-win7之家...

热门文章

  1. 支付宝当面付参数获取步骤,个人申请使用支付宝当面付
  2. 安卓手机python开发环境_使用Python开发Android应用程序:第一节 在手机上配置Python运行环境...
  3. WZOI-416反反复复
  4. RSD和wlwmanifest是什么
  5. 【生态环境保护】绿水青山就是金山银山——生态环保篇
  6. 惠普笔记本无法调节亮度解决办法【成功解决记录贴】
  7. 【Golang】欲入此Go先看Go的基本语法
  8. photoshop学习之用钢笔工具抠图(循序渐进)
  9. 易基因2022年度DNA甲基化研究高分项目文章精选
  10. 2.4g和5g要不要合并_无线路由2.4g和5g要同时开吗