μC/OS-Ⅱ中的任务
内核的主要工作:对人物进行管理和调度
μC/OS-Ⅱ任务:
用户任务:程序设计者编写的任务;为解决应用问题儿编写的;
系统任务:由系统提供的任务;为应用程序来提供某种服务的。
μC/OS-Ⅱ最多可以对64个任务进行管理。
系统任务:μC/OS-Ⅱ为应用程序预定义了两个系统任务
空闲任务:每个程序必须使用的;使CPU在没有用户任务可执行时有事可做;
统计任务:应用程序可以根据实际需要来选择使用;了解CPU的利用率。
μC/OS-Ⅱ的每个任务都必须有一个唯一的优先级别(64个优先级别,0表示优先级最高,数字越大则表示任务的优先级别越低)。
任务控制块:μC/OS-Ⅱ用来记录任务的堆栈指针,任务的当前状态,任务的优先级别等一些与任务管理有关的属性的表。
负责把任务代码和任务堆栈进行关联。使任务控制块,任务代码和任务堆栈成为一个整体。相当于一个任务的身份证。
任务控制块链表:
双向链表+专门定义一个数据类型为OS_TCB*的数组用来以任务的优先级别为顺序在各个数组元素里存放指向各个任务控制块的指针,为了加快对任务控制块访问的速度。
专门定义了一个OS_TCB*类型的变量OSTCBCur,存放当前正在运行的任务的任务控制块指针。为了μC/OS-Ⅱ能随时访问正在运行任务的任务控制块。
任务调度器:
在任务就绪表中查找最高优先级别的就绪任务;
实现任务转换。
调度器的种类:
任务的调度器,OSSched():在就绪表中查找优先级别最高的就绪任务
中断级的调度器,OSLntExt()
任务切换宏OS_TASK_SW():
任务切换(就绪任务中优先级别最高的):终止正在运行的任务(当前任务),转而去运行另外一个任务,也就是段端数据的切换(CPU堆栈指针的切换)
创建任务:创建一个任务控制块,通过任务控制块把任务代码和任务堆栈关联成一个完整的任务,使任务进入就绪状态并引发任务调度。
方法:
创建一个任务,赋予他最高的优先级别从而使它成为起始任务;
调用启动任务函数OSStart();
然后在这个起始任务中,再创建其他任务;
任务的挂起和恢复
任务的挂起:就是停止这个任务的运行
通过调用系统提供的函数OSTaskSuspead()来挂机自身或者除空闲任务之外的其他任务。
任务优先级别的修改:OSTaskChangePrio()
任务的删除:OSTaskDel()
查询任务的信息:OSTaskQuery()
应用程序首先应该调用函数OSInit()对全局变量和数据结构进行初始化,以建立μC/OS-Ⅱ的运行环境。
应用程序是通过调用函数OSStart()开始进入多任务管理的,但在调用函数OSStart()之前,必须至少建立了一个任务。