UCOS-III学习(一)——创建任务

创建任务

1、定义任务栈
在UCOS中,每个任务都是独立的,它们的运行环境都单独的保存在各个栈空间,任务使用的栈和任务控制块都使用的是静态变量,也就是全局变量。

#define APP_STK_SIZE   128
static CPU_STK APPTaskStartStk[APP_STK_SIZE];

2、定义任务控制块
任务控制块就是一个结构体,其中的成员共同描述了任务的全部信息。

static OS_TCB APPTaskTCB;

3、定义任务主体函数
任务实际上就是一个无限循环且不带返回值的C函数。
任务里面的延时函数必须使用UCOS提供的阻塞延时函数,当调用OSTimeDly函数的时候,当前任务会被挂起,调度器会切换到其他就绪的任务中,从而实现多任务运行。

4、创建任务
一个任务的三要素:任务主体,任务栈,任务控制块。
由OSTaskCreate()函数将三者联系在一起,任务创建后可随时被系统启动与调度。

5、启动任务
当任务创建好是处于就绪态。启动任务调度器OSStart()函数即可。

伪代码

#define APP_TASK_STK_SIZE   128
static CPU_STK APPTaskStk[APP_TASK_STK_SIZE];
static OS_TCB APPTaskTCB;

int main(void)
{
   OS_ERR err;
   OSInit(&err);
   OSTaskCreate((OS_TCB*) &APPTaskTCB,
                 (CPU_CHAR*) "APP Task Start",
                 (OS_TASK_PTR) APPTaskStart,
                 (void *) 0,
                 (OS_PRIO) APP_Task_PRIO,
                 (CPU_STK*) &APPTaskStk[0],
                 (CPU_STK_SIZE) APP_TASK_STK_SIZE/10,
                 (CPU_STK_SIZE) APP_TASK_STK_SIZE,
                 (OS_MSG_QTY) 5u,
                 (OS_TICK) 0u,
                 (void *) 0,
                 (OS_OPT) "太长了,不想写了",
                 (OS_ERR*) &err);
   OSStart(&err);
}
上一篇:数据结构:栈


下一篇:Noip模拟82 2021.10.21