- 任务堆栈:上下文切换用于保存任务当前环境。
- 任务控制块:保存任务的各个属性
- 任务函数:完成指定功能
Tables | Are |
---|
OSTaskCreate | 创建任务 |
OSTaskSuspend | 任务挂起 |
OSTaskResume | 任务恢复 |
OSSchedRoundRobinCfg | 时间片配置 |
OSSchedRoundRobinYield | 放弃时间片 |
#define TASK2_TASK_PRIO 4
#define TASK2_STK_SIZE 128
OS_TCB Task2_TaskTCB;
CPU_STK TASK2_TASK_STK[TASK2_STK_SIZE];
void task2_task(void *p_arg);
CPU_SR_ALLOC();
...
OS_CRITICAL_ENTER();
OSTaskCreate((OS_TCB * )&StartTaskTCB,
(CPU_CHAR * )"start task",
(OS_TASK_PTR )start_task,
(void * )0,
(OS_PRIO )START_TASK_PRIO,
(CPU_STK * )&START_TASK_STK[0],
(CPU_STK_SIZE)START_STK_SIZE/10,
(CPU_STK_SIZE)START_STK_SIZE,
(OS_MSG_QTY )0,
(OS_TICK )0,
(void * )0,
(OS_OPT )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
(OS_ERR * )&err);
OS_CRITICAL_EXIT();
注:
- 记得在创建任务的时候要进入临界区。并且进入临界区之前,要调用
CPU_SR_ALLOC();
- 在没有使用时间片轮转的时候,任何任务的优先级不能相同
- 第一个任务创建和初始化需要注意顺序
void OSTaskDel (OS_TCB *p_tcb,
OS_ERR *p_err)
void OSTaskSuspend (OS_TCB *p_tcb,
OS_ERR *p_err)
```
##任务恢复
```
void OSTaskResume (OS_TCB *p_tcb,
OS_ERR *p_err)
时间片调度是通过OS_SchedRoundRobin()进行的。 该函数由OSTimeTick或者OS_IntQTask()调用的
使能
- OS_CFG_SCHED_ROUND_ROBIN_EN 宏置为一
- 调用OSSchedRoundRobinCfg 进行配置
void OSSchedRoundRobinCfg (CPU_BOOLEAN en,
OS_TICK dflt_time_quanta,
OS_ERR *p_err);
放弃时间片
void OSSchedRoundRobinYield (OS_ERR *p_err)