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) —— 延时函数
热门推荐
如何调理湿热体质
穿越历史的长廊,探索永动机的发展历程
描写春天的优秀作文(精选78篇)
在新加坡开设口腔诊所的流程及资质要求
清华大学DeepSeek使用手册:从入门到精通的104页指南
两根485线支持多少通信协议
电脑摄像头打不开?3个实用方法帮你轻松修复
一起侵犯《王者荣耀》著作权案:百万粉丝博主获刑并赔偿10万元
二氧化碳对环境的影响
吉他演奏者必修课:全面提升手指灵活性的六大练习法
共赢人生智慧:利他,是最高境界的利己;共利,才能共赢
基础教育全解析:从幼儿园到高中阶段的教育体系
为什么胸口会闷痛
鬼谷子:人性六大戒律,字字珠玑,成大事者当如斯!
巨型病毒:病毒界的“巨无霸”及其生物学特性
密码基础(序列密码算法-付ZUC算法详解)
“动不动就撒娇”的孩子,长大后这一优势别人比不了,家长需重视
中国高考对外国教育体系有哪些借鉴意义?
正在流通的第五套人民币有收藏价值吗?这样的价值118000元!
帝王晚年的昏庸之谜:权力的腐蚀与人性的挑战
智能手表购选技巧全梳理
轻松创建TXT文件的六种实用方法,懒人必看
载人飞行起源史:从万户飞天到星舰
on、in、at在表示时间上的不同用法
不露脸的拍照姿势,轻松拍出松弛感
胜负彩25024期:中超球队亚冠背水一战,皇马曼城再次难解难分。
翡翠老人的象征意义与文化内涵解析
谷氨酰胺能治疗失眠吗
藏红花能天天喝吗?专家解读其功效与注意事项
建造紫禁城的目的是什么?它又产生了怎样的影响和作用?