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的延时是从调用开始到调用结束来计时:
使用vTaskDelay
下图(vTaskDelayUntil)的100ms则是以pre_time为始,以此为基础计算100ms,运行到vTaskDelayUntil再延时直至共计100ms(有点类似于周期为100ms)
使用vTaskDelayUntil

参考文章:
利用STM32CubeMX和keil模拟器,3天入门FreeRTOS(2.2) —— 延时函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值