天宇软件资讯7月6日消息,在嵌入式项目中,软件开发基本上使用延迟,那么,应该使用软件延迟还是硬件延迟呢?它们有什么区别?
今天就来说说硬件延迟和软件延迟的内容,以及它们的区别。
延迟硬件和软件
延迟的种类很多,先普及延迟的相关概念和分类。
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.如STM32HAL自带的阻塞延迟,也可以使用定时器实现阻塞延迟:
__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);
另一个例子是FreeRTOS非阻塞延迟:
vTaskDelay(10);
关于RTOS的延迟,请在这里扩展RTOS中的相对延迟和绝对延迟。请移动到文章《RTOS中相对延迟和绝对延迟的区别》
硬件和软件延迟的区别
通过以上分析,不难得出硬件延迟比软件延迟更常见。
1.软件比硬件延迟精度差;
2.软件延迟为阻塞延迟,硬件延迟可以阻塞,也可以非阻塞延迟;
3.硬件延迟应用更灵活、更广泛;
在实际应用中,硬件延迟和非阻塞延迟相对较为常见。
总结
今天就分享到这里吧,天宇软件资讯是一个软件分享基地,其中包括微信,红包辅助,支付宝,聊讯,微客优品,千喜惠,优乐购,淘卷淘,花惜,有趣超市,逗鱼时刻,惊喜淘,易凡,睛彩,坤米,达信酷,QQ,淘汇购,集市易选,泡泡易选,微信红包辅助,陌陌,钉钉,思语,百盛,苹果微信多开,微信分身,安卓微信多开等社交平台的功能有秒,避雷,埋雷软件,单透,扫尾,秒抢等一些红包强项外挂功能软件分享。喜欢的请关注收藏,谢谢。
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://wd.yurjk.com/1406.html
近期评论