请问osDelay和HAL_Delay的延迟动作效果是否一样?

2019-07-14 15:38发布

各位高手:
使用STM32cubemx程序生成包括FreeRTOS系统的STM32F1XX模版进行开发,现在创建多个任务,但在使用延迟函数上有个疑问。
1、osDelay和HAL_Delay均可以实现延迟动作,但是这两种在有操作系统的项目中,效果是否一样?
2、在FreeRTOS中osDelay是否可以将当前任务挂起,使低优先级的就绪任务进行执行,而osDelay完成后,该任务回复执行?
3、HAL_Delay是不是会造成独占CPU资源,while等待HAL_Gettick()的参数大于设定参数?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
7762642422d
2019-07-15 06:17
本帖最后由 moyanming2013 于 2015-4-9 21:46 编辑

osDelay属于CMSIS-RTOS的阶层,ARM CMSIS已经定义好了,由各RTOS具体实现。
FreeRTOS内部其实使用vTaskDelay来实现osDelay,其作用是让任务阻塞(注意是阻塞不是挂起,挂起必须显示调用vTaskSuspend()和vTaskResume()才能够实现),任务阻塞后,RTOS系统调用其它处于就绪状态的优先级最高的任务来执行。
当然你也可以不用osDelay而直接使用vTaskDelay,但为了保持兼容性,建议还是用osDelay而不是vTaskDelay,其实其效果类似。
HAL_Delay一直不停的调用获取系统时间的函数,直到指定的时间流逝然后退出,故其占用了全部CPU时间。

一周热门 更多>