你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于osDelay和HAL_Delay的疑问

[复制链接]
fireeye 提问时间:2015-4-3 21:22 /
各位高手:
使用stm32cubemx程序生成包括FreeRTOS系统的STM32F1XX模版进行开发,现在创建多个任务,但在使用延迟函数上有个疑问。
1、osDelay和HAL_Delay均可以实现延迟动作,但是这两种在有操作系统的项目中,效果是否一样?
2、在FreeRTOS中osDelay是否可以将当前任务挂起,使低优先级的就绪任务进行执行,而osDelay完成后,该任务回复执行?
3、HAL_Delay是不是会造成独占CPU资源,while等待HAL_GetTick()的参数大于设定参数?
收藏 评论11 发布时间:2015-4-3 21:22

举报

11个回答
nocoyou 回答时间:2015-4-4 09:12:44
不懂帮顶
kqh1120 回答时间:2015-4-4 09:24:39
不懂帮顶 smile.gif
wu1169668869 回答时间:2015-4-4 11:29:56
太过高端 3.gif
wamcncn 回答时间:2015-4-4 12:30:16
路过帮顶
拼命三郎 回答时间:2015-4-4 15:57:28
1.jpg
拼命三郎 回答时间:2015-4-4 15:58:02
1.jpg
nongxiaoming 回答时间:2015-4-9 18:10:37
直接看代码就知道了
moyanming2013 回答时间:2015-4-9 21:43:50
本帖最后由 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时间。
QQ截图20150409214136.jpg
QQ截图20150409214318.jpg
modu8888 回答时间:2017-4-5 13:26:40
奏奏奏 回答时间:2017-4-5 14:20:00
moyanming2013 发表于 2015-4-9 21:43
osDelay属于CMSIS-RTOS的阶层,ARM CMSIS已经定义好了,由各RTOS具体实现。
FreeRTOS内部其实使用vTaskDela ...

照这么说,osDelay 会比 HAL_Delay 好用
shuaige0908 回答时间:2019-5-15 09:48:02
osdelay有跳转作用,delay没有跳转作用,只是单纯的占用CPU资源。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版