延时函数

本文讨论了在FreeRTOS中,osDelay()与HAL_Delay()的不同用途。osDelay提供相对和绝对延时,适用于任务阻塞,让高优先级任务执行;而HAL_Delay则占用了全部CPU时间,适合单任务延时。在多任务环境中,vTaskDelay更常见。
摘要由CSDN通过智能技术生成

其实从学习FreeRTOS以来,一直有个疑问:为什么freertos.c中的延时函数要使用osDelay(),而不直接使用HAL_Delay()呢?两者有什么区别?

本节就来探讨一下这个问题的答案:

延时函数分类

相对延时:vTaskDelay

如果跳转osDelay()函数就会发现,底层调用的就是vTaskDelay:

绝对延时:vTaskDelayUntil

可见,相对延时和绝对延时区别就是:相对延时的“ 延时开始起点 ”就是在调用vTaskDelay的那一刻;而绝对延时的“ 延时开始起点 ”是 上一次延时的结束

在日常使用时,vTaskDelay更为常见!

 vTaskDelay 与 HAL_Delay 的区别

  • vTaskDelay 作用是让任务阻塞,任务阻塞后,RTOS系统调用其它处于就绪状态的优先级最高的任务来执行。
  • HAL_Delay 一直不停的调用获取系统时间的函数,直到指定的时间流逝然后退出,故其占用了全部CPU时间

因此,在多任务的情况下,vTaskDelay的使用频率会明显更高!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值