1、任务的创建
void OSTaskCreate (OS_TCB *p_tcb, //任务控制块
CPU_CHAR *p_name, //名称
OS_TASK_PTR p_task, //任务函数
void *p_arg, //传递参数
OS_PRIO prio, //优先级
CPU_STK *p_stk_base, //栈基地址
CPU_STK_SIZE stk_limit, //栈限,防止溢出
CPU_STK_SIZE stk_size, //栈大小
OS_MSG_QTY q_size, //内建消息大小
OS_TICK time_quanta, //时间片长度,默认10 ticks
void *p_ext, //扩展tcb地址
OS_OPT opt, //任务可选项
OS_ERR *p_err) //保存错误标志
2、任务的删除
如果我们不想使用某个任务了就可将其删除,删除任务使用函数OSTaskDel(),函数 原型如下:
**void OSTaskDel (OS_TCB p_tcb,
OS_ERR p_err)
- 删除某个任务以后,它占用的OS_TCB和堆栈就可以再次利用来创建其他的任务。
- 尽管uC/OS III允许在系统运行中删除任务,但是应该尽量避免这种操作,如果这 个任务可能占有与其他任务共享的资源,在删除此任务之前这个被占有的资源没 有被释放就有可能导致奇怪的结果。
3、任务的挂起
当我们想暂停某个任务,但是又不想删除掉这个任务的时候就可以使用函数 OSTaskSuspend()来将这个任务挂起,函数原型如下:
void OSTaskSuspend ( OS_TCB *p_tcb,OS_ERR *p_err)
4、任务的恢复
当我们想要恢复某个被挂起的任务的时候可以调用函数OSTaskResume(), 函数原型如下:
void OSTaskResume (OS_TCB *p_tcb,OS_ERR *p_err)
5、任务的调度
uC/OS III中的任务调度是由任务调度器来自动完成的,任务调度器有2种: 任务级调度器和中断级调度器。
• 任务级调度器为函数OSSched()。(常在OSTimeDlyHMSM和OSTimeDly等函 数中调用)
• 中断级调度器为函数OSIntExit(),当退出外部中断服务函数的时候使用中断级任 务调度。(比如串口通信中的中断、嘀嗒定时器中断)
6、任务的调度点
- 释放信号量或者发送消息,也可通过配置相应的参数不发生任务调度。
- 使用延时函数OSTimeDly()或者OSTimeDlyHMSM()。
- 任务等待的事情还没发生(等待信号量,消息队列等)。
- 任务取消等待。
- 创建任务。
- 删除任务。
- 删除一个内核对象。
- 任务改变自身的优先级或者其他任务的优先级。
- 任务通过调用OSTaskSuspend()将自身挂起。
- 任务解挂某个挂起的任务
- 退出所有的嵌套中断。
- 通过OSSchedUnlock()给调度器解锁。
- 任务调用OSSchedRoundRobinYield()放弃其执行时间片。
- 用户调用OSSched()。