跳转到主要内容

MCU硬件延时和软件延时有什么区别?

cathy 提交于

在嵌入式项目中,软件开发基本上都会使用到延时,那么,该用软件延时还是硬件延时?它们又有什么区别呢?

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

<strong><font color="#004a85">硬件和软件延时</font> </strong>

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

<strong>1.硬件延时</strong>

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

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

<strong>2.软件延时</strong>

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

比如软件延时函数:

<pre style="overflow-x:auto; background-color:#e9e9e9;">void Delay(uint32_t Cnt)
{
uint32_t i;

while(Cnt--)
{
for(i=0; i&lt;0x80000; i++);
}
}</pre>

<strong><font color="#004a85">阻塞和非阻塞延时</font> </strong>

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

<strong>1.阻塞延时</strong>

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

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

<strong>2.非阻塞延时</strong>

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

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

<strong>3.额外举例</strong>

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

<pre style="overflow-x:auto; background-color:#e9e9e9;">__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 &lt; HAL_MAX_DELAY)
{
wait += (uint32_t)(uwTickFreq);
}

while ((HAL_GetTick() - tickstart) &lt; wait)
{
}
}</pre>

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

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

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

<pre style="overflow-x:auto; background-color:#e9e9e9;">OSTimeDly(10);</pre>

<center><img src="http://mcu.eetrend.com/files/2021-06/博客/100113981-210548-1.png&quot; alt=“MCU硬件延时和软件延时有什么区别?"></center>

再比如FreeRTOS非阻塞延时:

<pre style="overflow-x:auto; background-color:#e9e9e9;">vTaskDelay(10);</pre>

<center><img src="http://mcu.eetrend.com/files/2021-06/博客/100113981-210549-2.png&quot; alt=“MCU硬件延时和软件延时有什么区别?"></center>

<strong><font color="#004a85">硬件和软件延时区别</font> </strong>

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

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

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

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

......

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

来源:<a href="https://mp.weixin.qq.com/s/9wxhH_EO3ANtKT8BZB0nGA">嵌入式专栏(作者:strongerHuang)</a>
免责声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请联系小编进行处理(联系邮箱:cathy@eetrend.com)。