1.UC/OS-II中的任务有两种:用户任务和系统任务。用户任务是为解决问题而编写的;系统任务是为应用程序来提供某种服务的。为了管理方便,UC/OS-II把每一个任务都作为一个节点,然后把他们连接成一个任务链表,目前,UC/OS-II可将64个任务进行管理。
2.1.1任务的状态
嵌入式系统中只有一个CPU,所以在一个具体时刻只有一个任务占用CPU;根据任务是否占用CPU,以及是否处于被中断,等待等情况,任务在UC/OS-II中可能处于下表中状态之一:
1.睡眠状态:任务只是以代码的形式驻留在程序空间(ROM或ROM),还没有交给操作系统管理时的情况叫做睡眠状态,简单地说,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态。
2.就绪状态:如果系统为任务配备了任务控制块并且在任务就绪表中进行了就绪登记,则任务就具备了运行的充分条件。
3.运行状态:处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入了运行状态,任何时刻只能有一个任务处于运行状态,就绪的任务只有当所以优先级高于本任务的任务都转为等待状态时,才能进入运行状态。
4.等待状态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给其他任务而使任务进入等待状态。
5.中断服务状态:一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序。
任务在不同状态下的转换如下:
2.1.2 用户任务代码的一般结构
1.用户任务代码的一般结构
任务的执行代码通常是一个无限循环结构,并且在这个循环中可以响应中断,这种结构也叫做超循环结构。
一个UC/OS-II任务的代码就是一个C语言函数,为了可以传递各种不同类型的数据甚至是函数,任务的参数是一个void类型的指针。
为了有效地对中断进行控制,在任务的代码里可使用UC/OS-II定义的宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来控制任务何时响应中断,何时屏蔽中断,在运行这两个宏之间的代码时是不会响应中断的,这种受保护的代码段叫做临界段。在具体应用中,可使用这对宏设置多个临界段。