FreeRTOS 任务与调度器(1) (2)

FreeRTOS 任务与调度器(1)

二、删除任务:

FreeRTOS 任务与调度器(1)

2.1、参数简介

FreeRTOS 任务与调度器(1)

 

2.2、使用简介

下面是官方例子:

在当前任务中,用xTaskCreate()创建另一个任务B

如果任务B创建成功,使用vTaskDelete(任务句柄)删除掉任务B。

用vTaskDelete(NULL)删除掉当前任务,目的是展示给我们看通过传入NULL可以删除当前任务

 

FreeRTOS 任务与调度器(1)

  三、延时函数:

FreeRTOS 任务与调度器(1)

3.1、vTaskDelay() 3.1.1、函数简介

xTaskDelay()

让调用这个函数的任务在一定时间内进入阻塞状态,时间到达后会切换回来这个任务。

如果输入参数为0,那么这个任务不会阻塞,但是会切换

*这个函数只有一个输入参数,但需要注意一下它是以tick时钟的中断次数为单位的(并不是以毫秒为单位):

FreeRTOS 任务与调度器(1)

FreeRTOS 任务与调度器(1)

3.1.2、使用简介

下面是官方的例子
其中两处vTaskDelay()

延时20个tick时间片

延时20ms。(pdMS_TOTICKS()可以把ms时间换成tick为单位)

FreeRTOS 任务与调度器(1)

 

 3.2、vTaskDelayUntil() 3.2.1、函数简介

让任务进入阻塞状态等待实际那到达,是精确的绝对时间

周期性任务能够使用vTaskDelayUntil()来达到连续的执行频率

3.2.2、使用简介

以下是官方的例子:

创建一个TickType_t类型的变量,用于记录上一次系统时间

用pdMS_TO_TICKS()函数把50ms转换为tick为单位,方便等下给vTaskDelayUntil调用

初始化第一步中的变量,在这一步后,这个变量不用再手动更新(vTaskDelayUntil()会更新它)

使用vTaskDelayUntil()、传入刚刚的参数,制造50ms固定时间的循环

FreeRTOS 任务与调度器(1)

 

3.3、重要对比

vTaskDelay()和vTaskDelayUntil()的不同之处
我们可以直接翻译一下官方手册的描述:

FreeRTOS 任务与调度器(1)

FreeRTOS 任务与调度器(1)

 

 

举个例子:
以下两个任务分别用vTaskDelay()和vTaskDelayUntil()来实现延时功能:
思考一个问题: 任务A 和任务B都能实现LED闪烁,那么A 和 B任务的LED端口多少毫秒翻转一次 ?
任务A:

FreeRTOS 任务与调度器(1)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wppdpg.html