良许Linux教程网 干货合集 单片机硬件和软件延时是啥意思?

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

前不久有一个读者问了一个关于延时的问题,大致是询问:软件延时和硬件延时是什么意思,以及在项目开发中它们有什么区别。

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

硬件和软件延时

延时有很多种类,让我先给大家介绍一下延时的相关概念和分类。

1. 硬件延时

硬件延时指的是利用具有计数功能的硬件来实现延时功能。

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

2. 软件延时

相对于硬件延时,软件延时指的是通过编写一段软件代码来实现延时,其原理是通过消耗CPU时间来进行延时操作。

比如软件延时函数:

void Delay(uint32_t Cnt)
{
  uint32_t i;

  while(Cnt--)
  {
    for(i=0; 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 wait += (uint32_t)(uwTickFreq);
  }

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

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

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

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

OSTimeDly(10);
image-20231103203818286
image-20231103203818286

再比如FreeRTOS非阻塞延时:

vTaskDelay(10);
image-20231103203823204
image-20231103203823204

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

硬件和软件延时区别

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

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

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

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

……

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

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部