0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机硬件和软件延时是啥意思?

strongerHuang 来源:strongerHuang 作者:strongerHuang 2022-12-06 09:10 次阅读

前不久有个读者在问关于延时的问题,大概就是问:软件延时和硬件延时是啥意思?做项目时他俩有什么区别?

今天就来讲讲关于硬件延时和软件延时的内容,以及它们的区别。

硬件和软件延时

延时的种类很多,先给大家普及一下延时相关概念和分类。

1.硬件延时

指利用具有计数功能的硬件进行延时。

比如:定时器Timer)、 实时时钟(RTC)、系统滴答定时器(SysTick)等具有计数功能的硬件。

2.软件延时

相对硬件延时而言,软件延时就是写一段软件代码,通过消耗CPU时间进行延时。

比如软件延时函数:

void Delay(uint32_t Cnt)
{
  uint32_t i;


  while(Cnt--)
  {
    for(i=0; i<0x80000; i++);
  }
}

阻塞和非阻塞延时

实际应用中,延时分阻塞和非阻塞延时。

1.阻塞延时

指CPU一直停留阻塞,不去做其它事情,直到延时结束结束。

像上面那个软件延时(Delay)就是一个典型的阻塞延时,一直消耗CPU,直到延时结束。

2.非阻塞延时

指在延时期间,没有阻塞CPU,也就是说CPU在延时期间可以执行其它代码。

比如:利用定时器中断延时,只需要开启定时器,在中断(计数)到来之前,CPU可以执行其它代码。

3.额外举例

a.利用定时器也能实现阻塞延时,比如STM32的HAL自带的阻塞延时:

__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;


  /* Add a freq to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }


  while ((HAL_GetTick() - tickstart) < wait)
  {
  }
}

b.利用RTOS自带的系统延时实现非阻塞延时,这个实现原理实际是利用了硬件延时(系统滴答定时器)。

当然,这个延时的原理(延时函数代码)相对比较复杂,对于普通用户只需要知道如何调用以及简单原理即可,感兴趣的老铁可以自行研究一下。

通常在一些RTOS的(Demo)例子的任务中都有系统延时,比如ucos非阻塞延时:

OSTimeDly(10);

6fc825ba-74fc-11ed-8abf-dac502259ad0.png

再比如FreeRTOS非阻塞延时:

vTaskDelay(10);

6fdd8662-74fc-11ed-8abf-dac502259ad0.png

关于RTOS的延时,这里额外拓展一下关于RTOS中的相对延时和绝对延时的内容,请移步至文章《RTOS中相对延时和绝对延时的区别

硬件和软件延时区别

通过以上分析,其实不难得出,硬件延时相对软件延时更普遍。

1.软件相对硬件延时精度更差;

2.软件延时为阻塞延时,硬件延时可阻塞,也可非阻赛延时;

3.硬件延时应用更灵活、更广泛;

实际应用中,硬件延时、非阻塞延时相对更普遍。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    44000

    浏览量

    621419
  • 硬件
    +关注

    关注

    11

    文章

    2927

    浏览量

    64887
  • 软件
    +关注

    关注

    67

    文章

    4353

    浏览量

    85744
  • 定时器
    +关注

    关注

    23

    文章

    3149

    浏览量

    112196

原文标题:单片机硬件和软件延时是啥意思?

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机软件延时精确计算

    本帖最后由 咖小啡 于 2011-4-6 15:37 编辑 求单片机软件延时精确计算,C编程,for语句。好像与单片机、晶振有关的啊,望详细解答,先谢谢了void delay(u
    发表于 04-06 15:21

    avr单片机里的ddra一般是啥意思

    avr单片机里的ddra一般是啥意思?高液晶驱动遇到问题。找了个液晶的驱动程序、本例是基于avr单片机写的现在给改成51得了可最后主函数里出现一个ddra的变量。不知道这个ddra是啥意思
    发表于 03-13 22:59

    基于单片机与FPGA可调延时模块的设计

    设计的延时调节模块,硬件结构简单,设计集成度高。软件方面,单片机程序将C语言和汇编语言很好地结合,FPGA充分发挥了硬件语言易改变电路结构和
    发表于 09-25 07:27

    单片机软件延时精确如何计算

    单片机软件延时精确计算,C编程,for语句。好像与单片机、晶振有关的啊,望详细解答,先谢谢了void delay(unsigned char n){unsigned char i;f
    发表于 06-03 05:55

    51单片机的几种精确延时

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件
    发表于 10-13 11:24

    单片机延时1秒的延时程序

    单片机延时1秒的延时程序,简介:延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的
    发表于 07-14 07:47

    51单片机软件延时1S怎么实现

    51单片机软件延时1S
    发表于 11-19 09:10

    单片机软件硬件的区别和联系

    本课程是《朱有鹏老师单片机完全学习系列课程》第1季第2个课程,用通俗易懂的语言讲了很多和单片机有关的技术概念,如CPU、ROM、RAM、外设、电路板、软件硬件工作的差别等。目的是希望大
    发表于 03-01 06:35

    单片机精确毫秒延时函数

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件
    发表于 12-26 15:54 1.2w次阅读

    单片机有哪些品牌和单片机软件延时10ms的程序及有哪些排序算法

    本文档的主要内容详细介绍的是单片机有哪些品牌和单片机软件延时10ms的程序及有哪些排序算法。
    发表于 07-10 17:40 5次下载
    <b class='flag-5'>单片机</b>有哪些品牌和<b class='flag-5'>单片机</b><b class='flag-5'>软件</b><b class='flag-5'>延时</b>10ms的程序及有哪些排序算法

    单片机延时是怎么实现的

    单片机延时大家程序中都会用到,那么怎么实现呢?通常我们有软件实现,就是语句循环;或者硬件实现,通过定时器/计数器。 对于精准而言,从实现语言方向看,底层语言有汇编和C语言,通常我们
    的头像 发表于 10-12 17:18 9006次阅读

    【Practical】51单片机软件延时1S

    51单片机软件延时1S
    发表于 11-12 14:51 13次下载
    【Practical】51<b class='flag-5'>单片机</b><b class='flag-5'>软件</b><b class='flag-5'>延时</b>1S

    单片机延时问题20问

    简介:延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机
    发表于 11-13 21:06 4次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>延时</b>问题20问

    51单片机实战教程(四 延时程序)

    延时程序在单片机系统开发中是必不可少的。如我们常用蜂鸣器声的长短来表示系统开机自检结果,蜂鸣器声的长短就离不开延时程序。延时程序分软件
    发表于 11-23 16:51 13次下载
    51<b class='flag-5'>单片机</b>实战教程(四 <b class='flag-5'>延时</b>程序)

    关于硬件延时软件延时的内容以及它们的区别

    单片机项目都会使用到延时,那么,该用软件延时还是硬件延时?它们又有什么区别呢?
    的头像 发表于 04-11 10:47 2572次阅读
    关于<b class='flag-5'>硬件</b><b class='flag-5'>延时</b>和<b class='flag-5'>软件</b><b class='flag-5'>延时</b>的内容以及它们的区别