2.2、使用简介
下面是官方例子:
在当前任务中,用xTaskCreate()创建另一个任务B
如果任务B创建成功,使用vTaskDelete(任务句柄)删除掉任务B。
用vTaskDelete(NULL)删除掉当前任务,目的是展示给我们看通过传入NULL可以删除当前任务
三、延时函数: 3.1、vTaskDelay() 3.1.1、函数简介
xTaskDelay()
让调用这个函数的任务在一定时间内进入阻塞状态,时间到达后会切换回来这个任务。
如果输入参数为0,那么这个任务不会阻塞,但是会切换
*这个函数只有一个输入参数,但需要注意一下它是以tick时钟的中断次数为单位的(并不是以毫秒为单位):
3.1.2、使用简介下面是官方的例子
其中两处vTaskDelay()
延时20个tick时间片
延时20ms。(pdMS_TOTICKS()可以把ms时间换成tick为单位)
3.2、vTaskDelayUntil() 3.2.1、函数简介
让任务进入阻塞状态等待实际那到达,是精确的绝对时间
周期性任务能够使用vTaskDelayUntil()来达到连续的执行频率
3.2.2、使用简介以下是官方的例子:
创建一个TickType_t类型的变量,用于记录上一次系统时间
用pdMS_TO_TICKS()函数把50ms转换为tick为单位,方便等下给vTaskDelayUntil调用
初始化第一步中的变量,在这一步后,这个变量不用再手动更新(vTaskDelayUntil()会更新它)
使用vTaskDelayUntil()、传入刚刚的参数,制造50ms固定时间的循环
3.3、重要对比
vTaskDelay()和vTaskDelayUntil()的不同之处
我们可以直接翻译一下官方手册的描述:
举个例子:
以下两个任务分别用vTaskDelay()和vTaskDelayUntil()来实现延时功能:
思考一个问题: 任务A 和任务B都能实现LED闪烁,那么A 和 B任务的LED端口多少毫秒翻转一次 ?
任务A: