任务的状态
FreeRTOS中任务共存在4种状态
- Running 运行态
当任务处于实际运行状态称之为运行态,即CPU的使用权被这个任务占用(同一个任务仅一个任务处于运行态)。
- Ready 就绪态
处于就绪态的任务是指那些能够运行(没有被阻塞和挂起),但是当前没有运行的任务,因为同优先级或更高优先级的任务正在运行。
- Blocked 阻塞态
如果一个任务因延时,或等待吸信号量、信息队列、事件标志组等而处于的状态被称之为阻塞态。
- Suspended 挂起态
类似暂停,通过调用函数 vTaskSuspend() 对指定任务进行挂起,挂起后这个任务将不被执行,只有调用函数 xTasResume() 才可以将这个任务从挂起态恢复。
注意,运行态只有通过就绪态才能进入,其它状态都不能直接进入就绪态。
接下来实操一下
- 判断句柄就可以知道该任务是否被创建
if(taskLED1Handle == NULL)
{osThreadDef(taskLED1, StartTaskLED1, osPriorityNormal, 0, 128);taskLED1Handle = osThreadCreate(osThread(taskLED1), NULL);
}//这里是如果队列没有被创建,则创建一个新的队列
- 删除任务
在cubeMX有封装vTaskDelete的函数osThreadTerminate(),删除记得把句柄置零
osThreadTerminate(taskLED1Handle);
taskLed1Handle = NULL;
- 挂起和恢复任务
osThreadSuspend(taskLED1Handle); //挂起任务
osThreadResume(taskLED1Handle); //恢复任务