uC/OS-II的特点是主要有一个内核,只有任务管理和任务调度,无文件系统,界面系统,外设管理系
统等。小巧,源代码公开,实时性强,可移植性好,多任务,基于优先级的可剥夺型调度。
先挑几个有用的说一说,可裁剪:它的系统服务函数中定义了条件编译开关量,对不需要的服务可以
通过条件编译予以裁剪,只使用里面的应用程序需要的那些系统服务。代码可裁剪到2K左右。
可剥夺:它完全是可剥夺型的实时内核,也就是说已经准备就绪的高优先级任务总是可以剥夺正在运
行的低优先级的任务的CPU使用权。(这一点我们在写程序时一定要注意)
多任务:可以管理64个任务,不同版本支持的任务数有差别,赋予每个任务的优先级必须是不同的,
这也就是说它不支持时间片轮转调度发(该调度法适用于调度优先级相同的任务)。
可确定性:它绝大部分函数的执行时间具有可确定性,除了函数OSTimeTick()和某些时间标志服务外,
它的系统服务执行时间不依赖于应用程序任务数目的多少,用户总是能知道它函数调用**务执行了多长
时间。
任务栈:它允许每个任务都有自己单独的栈,可以自行定义它的大小。
中断管理:它的中断嵌套层数可达255层,中断可使正在执行的任务暂时挂起,如果中断使更高优先级
的任务进入就绪,则高优先级的任务在中断嵌套全部退出后立即执行。
uC/OS-II的内核中10个文件与微处理器类型无关,移植后无需修改.
这类文件包括:
OS_CORE.C OS_FLAG.C OS_MBOX.C OS_MEN.C OS_MUTEX.C
OS_SEM.C OS_TASK.C uCOS_II.C OS_TIME.C OS_Q.C
3个文件与CPU类型相关
它们是:
OS_CPU_C.C OS_CPU.H OS_CPU.ASM
2个文件与具体的应用有关
它们是:
OS_CFG.H INCLUDE.H
事件:一个任务或者中断服务子程序可以通过内核服务来向另外的任务发信号。
最一般的事件包括:信号量,消息队列,互斥信号量,消息邮箱,事件标志组等。
信号量是一种通信机制。信号量:有两种类型,其一支取0,1两个值的二值信号量;其二由若干位组
合成的计数式信号量一般有8位,16位,32位等,具体是多少位取决于内核。
P/V操作普遍应用与内核,其主要作用有三点:
其一满足互斥条件,实现共享资源的独占使用;其二标志某事件的发生;其三使两个任务行为同步。信号量就像一块令牌,谁先拿到令牌,谁就能运行;得不到就只有等待。
信号量是一个受保护的量,只有初始化和P/V操作才能改变信号量的值,其工作原理是:
(1)初始化信号量也叫建立信号量。信号量初始化时,要给信号量赋初值,等待信号量的任务列表清空。
(2)等信号(P)或申请信号量叫挂起(PEND)。对于执行等待信号量的任务来说,若该信号有效,则信号量值减1,任务继续执行,若信号量值位0,则任务继续被挂起。若内核允许被定义等待超时后,则超时后,给任务转入就绪,同时返回错误代码以示发生了超时错误。
(3)给信号(V)叫发信号(POST)。若没有任务等待该信号量,则信号量值仅简单加1;若只有一个任务等待该信号量,则任务转入就绪状态,信号量的值不加1;若有多个任务等待信号量,至于谁先得到信号量,那就得看内核是如何调度的了。一般有两种可能:其一是按优先级原则,等待信号量的任务中优先级最高的先得到;其二是按先进先出原则,最早开始等待信号量的那个任务先得到。uC/OS-II只支持优先级法。
文章评论(0条评论)
登录后参与讨论