电子说
1
创建任务
创建任务时使用的函数如下:
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, //函数指针,任务函数
const char * const pcName, //任务的名字
const configSTACK_DEPTH_TYPE usStackDepth,//栈大小,单位为word,10表示40字节
void * const pvParameters, //调用任务函数时传入的参数
UBaseType_t uxPriority, //优先级
TaskHandle_t * const pxCreatedTask );//任务句柄,以后使用它来操作这个任务
参数说明:
实例:
void Task1Function(void * param)
{
while (1)
{
printf("1");
}
}
void Task2Function(void * param)
{
while (1)
{
printf("2");
}
}
xTaskCreate(Task1Function, "Task1", 100, NULL, 1, &xHandleTask1);
xTaskCreate(Task2Function, "Task2", 100, NULL, 1, NULL);
开启任务调度:
vTaskStartScheduler(); //开启任务调度
结果:
2
删除任务
删除任务使用的函数如下:
void vTaskDelete( TaskHandle_t xTaskToDelete );
参数说明:
实例:
void vTask1( void *pvParameters )
{
const TickType_t xDelay100ms = pdMS_TO_TICKS( 100UL );
BaseType_t ret;
/* 任务函数的主体一般都是无限循环 */
for( ;; )
{
/* 打印任务的信息 */
printf("Task1 is runningrn");
ret = xTaskCreate( vTask2, "Task 2", 1000, NULL, 2, &xTask2Handle );
if (ret != pdPASS) printf("Create Task2 Failedrn");
// 如果不休眠的话, Idle任务无法得到执行
// Idel任务会清理任务2使用的内存
// 如果不休眠则Idle任务无法执行, 最后内存耗尽
vTaskDelay( xDelay100ms );
}
3
任务状态
ready :就绪,随时可以运行
blocked :阻塞,该任务在等待某一事件发生
suspended :挂起,该任务暂停休息
当创建任务并开始任务调度后,所有任务都处于Ready就绪状态,系统随机挑选一个任务Running,正在执行的任务可以使用vTaskSuspend函数使自己进入挂起状态(传入参数NULL或自己的句柄),也可以使其他任务进入挂起状态(传入参数为需要挂起任务的句柄),进入暂停状态后,需要在别的任务执行过程中调用vTaskResume函数该任务才会重新进入Ready状态;
在任务执行过程中,需要等待某个函数或事件的发生,则进入挂起状态(Baocked),当等待的事件(可能是中断或某个任务)发生后该任务才会恢复Ready状态。
全部0条评论
快来发表一下你的评论吧 !