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签解签详解:赵子龙救阿斗的启示
孔子教你用哲学化解情感冲突
山东橙子咨询:情感修复五步法
占星术与八字命理:两种古老预测学问的本质区别
《火影忍者新传》:千手纲手名字之谜
《火影忍者》:纲手名字背后的秘密
《火影忍者》中的“纲手”:一个名字背后的传奇
学生t-分布:数学原理大揭秘!
统计学考试必考知识点:t分布与正态分布的区别与应用
职场压力下的“淡定”之道
香菇烧鸡烹饪指南:5种关键香料与烹饪技巧详解
庄子教你如何淡定面对生活
每天五分钟的淡定,真的能让你多活十几年!
双十一抖音品牌自播大揭秘:如何影响你的购物车?
28天減脂計畫,營養師教你不挨餓還能降體脂
国家二级保护野生动物频频现身云南凤庆,展现生态保护成效
溶洞探险项目规划书怎么写
2026年世界杯48强分组方式及其影响分析
翻译官的重逢:八年后,我们重新开始
甲流来袭专家提醒老年人需更注意防范,及早缓解症状避免重症风险
为什么大学生要加强法制教育
在历史中,夫妻之间在古时竟有这么多称呼,一点不比现在少
鱼类免疫接种的常见方法及注意事项
复旦欢迎中国籍留学生直博,争议背后的思考
机构发布2024世界大学学术排名,复旦、上海交大位列全球50强
青海省人事考试信息网:最新公考政策解析
三重县御在所缆车与周边景点
血小板增多症:治疗选择与就医建议
健康生活:远离血小板增多症
鲁索替尼:血小板增多症治疗的新突破