- 331
- 1
- 约1.65万字
- 约 15页
- 2019-10-08 发布于江西
- 举报
VμC/OS?和?μC/OS-II?是专门为计算机的嵌入式应用设计的,?绝大部分代码是用?C?语言编写
的。CPU 硬件相关部分是用汇编语言编写的、总量约?200?行的汇编语言部分被压缩到最低限
度,为的是便于移植到任何一种其它的?CPU?上。
工作原理 编辑
uC/OS-II?是一种基于优先级的可抢先的硬实时内核。
要实现多任务机制,那么目标?CPU?必须具备一种在运行期更改?PC?的途径,否则无法做到切
换。不幸的是,直接设置?PC?指针,还没有哪个?CPU?支持这样的指令。但是一般?CPU?都允许通
过类似?JMP,CALL?这样的指令来间接的修改?PC。我们的多任务机制的实现也正是基于这个出
发点。事实上,我们使用?CALL?指令或者软中断指令来修改?PC,主要是软中断。但在一些?CPU
上,并不存在软中断这样的概念,所以,我们在那些?CPU?上,使用几条?PUSH?指令加上一条?CALL
指令来模拟一次软中断的发生。
在?uC/OS-II?里,每个任务都有一个任务控制块(Task?Control?Block),这是一个比较复杂的 数
据结构。在任务控制块的偏移为0的地方,存储着一个指针,它记录了所属任务的专用堆栈地址。
事实上,在?uC/OS-II?内,每个任务都有自己的专用堆栈,彼此之间不能侵犯。这点要求程序员在他
们的程序中保证。一般的做法是把他们申明成静态数组。而且要申明成?OS_STK?类型。当任务
有了自己的堆栈,那么就可以将每一个任务堆栈在那里记录到前面谈到的任务控制快偏移为0的
地方。以后每当发生任务切换,系统必然会先进入一个中断,这一般是通过软中断或者 时钟中断
实现。然后系统会先把当前任务的堆栈地址保存起来,仅接着恢复要切换的任务的堆栈地址。由
于哪个任务的堆栈里一定也存的是地址(还记得我们前面说过的,每当发生任务切换,系统必然
会先进入一个中断,而一旦中断?CPU?就会把地址压入堆栈),这样,就达到了修改?PC?为下一个任
务的地址的目的。
2任务管理 编辑
uC/OS-II?中最多可以支持64?个任务,分别对应优先级0~63,其中0?为最高优先级。63
为最低级,系统保留了4个最高优先级的任务和4个最低优先级的任务,所有用户可以使用的任
务数有56个。
uC/OS-II?提供了任务管理的各种函数调用,包括创建任务,删除任务,改变任务的优先级,
任务挂起和恢复等。
系统初始化时会自动产生两个任务:一个是空闲任务,它的优先级最低,该任务仅给一个
整型变量做累加运算;另一个是系统任务,它的优先级为次低,该任务负责统计当前?cpu?的利
用率。
时间管理
uC/OS-II?的时间管理是通过定时中断来实现的,该定时中断一般为10毫秒或100毫秒发生
一次,时间频率取决于用户对硬件系统的定时器编程来实现。中断发生的时间间隔是固定不变
的,该中断也成为一个时钟节拍。
uC/OS-II?要求用户在定时中断的服务程序中,调用系统提供的与时钟节拍相关的系统函数,
例如中断级的任务切换函数,系统时间函数。
内存管理
在?ANSI C?中是使用?malloc?和?free?两个函数来动态分配和释放内存。但在 嵌入式实时系
统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc?和?free?的执行时
间也是不确定。
uC/OS-II?中把连续的大块内存按分区管理。每个分区中包含整数个大小相同的内存块,但
不同分区之间的内存块大小可以不同。用户需要动态分配内存时,系统选择一个适当的分区,
按块来分配内存。释放内存时将该块放回它以前所属的分区,这样能有效解决碎片问题,同时
执行时间也是固定的。
3通信同步 编辑
对一个多任务的操作系统来说,任务间的通信和同步是必不可少的。uC/OS-II?中提供了4
种同步对象,分别是信号量,邮箱,消息队列和事件。所有这些同步对象都有创建,等待,发
送,查询的接口用于实现进程间的通信和同步。
4任务调度 编辑
uC/OS-II?采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪
了的最高优先级的任务。
uC/os-II?的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦
处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,
uC/OS-II?规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。
1)?高优先级的任务因为需要某种临界资源,主动请求挂起,让出处理器,此时将调度 就
绪状态的低优先级任务获得执行,这种调度也称为任务级的上下文切换。
2)?高优先级的任务因为时钟节拍到来,在时钟中断的处理程序中,内核发现高优先级任
务获得了执行条件(如休眠的时钟
原创力文档

文档评论(0)