vTaskDelay和vTaskDelayUntil的区别
创作时间:
作者:
@小白创作中心
vTaskDelay和vTaskDelayUntil的区别
引用
CSDN
1.
https://m.blog.csdn.net/2301_78981010/article/details/139383368
在FreeRTOS中,vTaskDelay和vTaskDelayUntil都是常用的延时函数,但它们在延时时间的记录方式上存在本质区别。本文通过具体代码示例和逻辑分析仪的波形图,详细解释了这两个函数的工作原理,并展示了它们在实际应用中的不同效果。
二者在如何记录延时时间上存在差异,vTaskDelay延时时间是以该函数调用为始,vTaskDelayUntil则以传入的时间形参为始:
/*二者的函数原型*/
void vTaskDelay(const TickType_t xTicksToDelay); //此后将要延迟多久
BaseType_t xTaskDelayUntil(TickType_t* const pxPreviousWakeTime, const TickType_t xTimeIncrement); //以pxPreviousWake Time为基础,在此基础上延迟多久
假如有一任务循环执行设置电平为高电平,并用HAL_Delay函数保持其高电平,延时时间不一(即高电平时间不一),之后设置为低电平并分别使用vTaskDelay和vTaskDelayUntil进行100ms延时。(使用vTaskDelayUntil需要传入一个时间为参考,可通过xTaskGetTickCount获得TickType_t类型的时间比变量,这里)
参考:利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.2) —— 延时函数
while(1){
TickType_t pre_time = xTaskGetTickCount();
/*电平高电平*/
/*延时*/
/*电平低电平*/
vTaskDelayUntil(&pre_time, 100/portTICK_PERIOD_MS);
}
通过逻辑分析仪获取电平翻转信息,下图(vTaskDelay)可见,延时的100ms是在就是每个低电平持续的时间,说明vTaskDelay的延时是从调用开始到调用结束来计时:
下图(vTaskDelayUntil)的100ms则是以pre_time为始,以此为基础计算100ms,运行到vTaskDelayUntil再延时直至共计100ms(有点类似于周期为100ms)
参考文章:
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.2) —— 延时函数
热门推荐
认沽期权:一种重要的金融风险管理工具
工伤劳动能力鉴定流程及后续处理方法
房产权到期怎么办?两种解决方案全解析
走好基层治理“最后一公里”
打卡元谋土林,领略神奇雕塑,感受岁月变迁!
排序学习(LTR)简明:从RankNet到LambdaMART
解读相对论的前世今生,即使没有爱因斯坦,他也会很快提出相对论
如何高效管理和保护公司内部文件?
想离婚怎么咨询?两种离婚方式全解析
离婚前我该考虑哪些因素
网站查询页面开发设计指南
ps怎么抠掉图中不想要的东西?分享5种一键抠图方法,建议收藏
何以高效运转?答案是……
高并发下的数据一致性保障(图文全面总结)
数字合成技术助力影视后期制作,提升视觉效果
长沙地铁新动向:新线路加速城市脉搏!
右眼跳什么情况有什么预兆?解读眼跳的常见原因与预兆
婴儿每月身高体重增长标准是什么
解锁朗姆酒的魅力:品味不同种类的独特之处
如何有效管理项目优先级?项目优先级处理方法详解
吸收热见于什么病
车贷计算详解:利率、首付与还款方式全解析
路亚钓鱼炸线怎么办?正确线组搭配全攻略
避免链条磨损!选择油锯润滑脂的 4 个科学标准
《千与千寻》—— 深度解读成长、勇气与爱的动画史诗
如何查询房屋抵押状态?查询过程中有哪些便捷的方法和渠道?
Unity中添加第三方包的两种方法:Git URL和本地磁盘
适合一个人摆摊的四季小吃,创业新手必看!如何挑选低成本、高收益的小吃项目?
防晒衣是智商税?我劝你先别急,看完这篇少踩雷!
一键注册所有网站:如何轻松应对繁琐的注册流程