任务转移
任务状态
讲到任务调度,就要先讲讲任务的几种状态:大类分为:非运行态和运行态,非运行态又可分为三种状态,如下:
阻塞状态:非运行态的子状态,表示任务正处于等待某个事件的状态;
任务可以进入阻塞态以等待以下两种不同类型的事件:定时(时间相关)事件——这类事件可以是延迟到期或是绝对时间到点。比如说某个任务可以进入阻塞态以延迟 10ms;
这个有两个API函数可以调用来进行延时,第一个函数
void vTaskDelay( const TickType_t xTicksToDelay )
,
xTicksToDelay:表示延时多少个心跳周期,调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态;经常使用portTICK_PERIOD_MS将延时周期转换为Ms为单位,如延时100Ms:
VTaskDelay(100/portTICK_PERIOD_MS)
;
第二个函数
void vTaskDelayUntil( TickType_t * const pxPreviousWakeTime, const TickType_t xTimeIncrement )
,
该函数于实现某个任务以固定频率周期性执行,
pxPreviousWakeTime: 保存了上次被唤醒的时刻值,
xTimeIncrement :则指定任务固定频率的周期;举个例子:
static void vLEDTask(