嵌入式设备设计的内核uc/os-ii api使用手册大全
1uC/OS-II 简介2uC/OS-II 应用程序基本结构3一些重要的uC/OS-II API无线演示控制器
介绍1) OSTaskCreate函数2) OSTaskSuspend函数3) OSTaskResume函数左右摇头摆4) OS_EN5) OS_EXIT_CRITICAL宏6) OSTimeDly耳光室
函数4uC/OS-II 多任务实现机制分析 前面已经说过,uC/OS-II是一种基于优先级的可抢先的多任务内核。那么,它的多任务机制到底如何实现的呢?了解这些原理,可以帮助我们写出更加健壮的代码来。由于我们面向的初级程序员,本文不打算写成又一篇uC/OS-II的源码分析,那样的文章太多了,打算从实现原理的角度探讨这个问题。 首先我们来看看为什么多任务机制可以实现?其实在单一CPU的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于CPU执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。
由上面的描述,不难发现,要实现多任务机制,那么目标CPU必须具备一种在运行期更改PC
的途径,否则无法做到切换。不幸的是,直接设置PC指针,目前还没有哪个CPU支持这样的指令。但是一般袜子定型机CPU都允许通过类似JMP,游艇门CALL这样的指令来间接的修改PC。
我们的多任务机制的实现也正是基于这个出发点。事实上,我们使用CALL指令或者软中断指令来修改PC,主要是软中断。但在一些CPU上,并不存在软中断这样的概念,所以,我们在那些CPU上,使用几条widevine
PUSH指令加上一条CALL指令来模拟一次软中断的发生。 回想一下你在微机原理课程上学过的知识,当发生中断的时候,CPU保存当前的PC和状态寄存器的值到堆栈里,然后将PC设置为中断服务程序的入口地址,再下来一个机器周期,就可以去执行中断服务程序了。