1. 任务的基本概念
uCOS 的任务可认为是一系列独立任务的集合。每个任务在自己的环境中运行。在任何时刻,只有一个任务得到运行, uCOS 调度器决定运行哪个任务。调度器会不断的启动、停止每一个任务,宏观看上去所有的任务都在同时在执行。作为任务,不需要对调度器的活动有所了解,在任务切入切出时保存上下文环境(寄存器值、堆栈内容)是调度器主要的职责。
2. 任务调度器的基本概念
uCOS 中提供的任务调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的。
3.任务状态迁移
uCOS 系统中的每一个任务都有多种运行状态,他们之间的转换关系是怎么样的呢?从运行态任务变成阻塞态,或者从阻塞态变成就绪态,这些任务状态是如何进行迁移?
4.uCOS 的任务状态
uCOS 系统中的每一任务都有多种运行状态。系统初始化完成后,创建的任务就可以在系统中竞争一定的资源,由内核进行调度——就绪、延时、等待、运行、挂起、删除等。。。
5. 常用的任务函数
任务挂起函数 OS_TaskSuspend()
任务恢复函数 OSTaskResume()
删除任务函数 OSTaskDel()
删除任务和挂起任务有些相似,其实有着本质的区别,根本来说,最大的不同就是删除任务队任务控制块的操作,我们知道在任务创建的时候,需要给每个任务分配一个任务控制块,这个任务控制块存储有关这个任务重要的信息,对任务间有至关重要的作用,挂起任务根本不会动任务控制块,但删除任务就会把任务控制块进行初始化,这样子关于任务的任何信息都被抹去。注意了,删除任务并不会释放任务的堆栈空间
任务延时函数
6. 任务的设计要点
作为一个嵌入式开发人员,要对自己设计的嵌入式系统要了如指掌,任务的优先级信息,任务与中断的处理,任务的运行时间、逻辑、状态等都要知道,才能设计出好的系统,所以,在设计的时候需要根据需求制定框架。在设计之初就应该考虑下面几点因素:任务运行的上下文环境、任务的执行时间合理设计。
uCOS 中程序运行的上下文包括:
中断服务函数。
普通任务。
空闲任务。
7.任务管理实验
系统开始运行后,三个任务均每隔 1s 切换一次自己的 LED 灯的亮灭状态。当 LED2 和 LED3 两个任务切换 5 次后就均挂起自身,停止切换。而 LED1 依然继续切换 LED1,当 LED1 切换 10 次时,会恢复 LED2 和 LED3 两个任务运行。依此循环。