uC/OS-II 学习笔记之:任务的概念
扫描二维码
随时随地手机看文章
一、任务:一个任务,也叫一个线程,是一个简单程序,改程序可以认为CPU完全只属于自己。每个任务都是整个应用的某一部分,
每个任务被赋予一定的优先级,有它自己的一套CPU寄存器和栈空间。
二、多任务:多任务运行的实现实际是靠CPU在许多任务之间转换、调度。CPU轮流服务于一系列任务中的某一个。
三、任务状态:每个任务都是一个无限循环。每个任务都处在以下5种状态之一:
1)睡眠态:任务只是以代码的形式驻留在程序空间(ROM或RAM),还没有交给操作系统管理时的情况叫做睡眠态(也称休眠态)。
简单说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠态。
2)就绪态:如果系统为任务配备了任务控制块且在任务就续表中进行了就绪登记,则任务就具备了运行的充分条件,
这时任务的状态就叫做就绪态。
3)运行态:处于就绪态的任务如果经调度器的判断获得了CPU的使用权,则任务就进入运行状态。
注:任何时刻只能有一个任务处于运行态,就绪的任务只有当所有优先级高于本任务的任务都转为等待状态时,才能进入运行态。
4)等待态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其它任务而使任务进入等待态(也称阻塞态)。
5)中断态:一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态(也称挂起态)。
四、任务不是普通的C语言函数,因此不能被主函数或其它函数调用,主函数只负责创建和启动它们,而由操作系统负责来调度运行它们。
五、uC/OS-II中预定义了两个为应用程序服务的系统任务:空闲任务和统计任务。
其中空闲任务是每个应用程序必须使用的,而统计任务是应用程序根据实际需要来选择使用的。
六、任务的组成:任务控制块、任务代码、任务堆栈。
七、创建任务的函数:
INT8U OSTaskCreate (
void (*task)(void *pd),//定义一个函数指针
void *pdata,//传递给任务的参数
OS_STK *ptos,//任务堆栈栈顶的指针
INT8U prio//指定任务优先级的参数
)
参: 任哲 《嵌入式实时操作系统uC/OS-II原理及应用》
参: 卢有亮 《嵌入式实时操作系统uC/OS原理与实践》