μC/OS-Ⅱ的终端

来源:互联网 发布:mac os x 10.11.6下载 编辑:程序博客网 时间:2024/05/17 02:22

μC/OS-Ⅱ的终端

μC/OS-Ⅱ系统响应中断的过程:

系统接收到中断请求后,如果这时CPU处于中断允许状态(即中断是开放的),系统就会终止正在运行的当前任务,而按照中断向量的指向转而去运行中断服务子程序;当中断服务子程序的运行结束后,系统将会根据情况返回被终止的任务继续运行,或者转向运行另一个具有更高优先级别的就绪任务。

 

对于可剥夺型内核来说,中断服务子程序运行结束之后,系统将会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而不一定要持续运行被中断的任务。

 

OSIntEnter():

把全局变量OSIntNexting加1,从而用它来记录中断嵌套的层数。函数OSIntEnter()经常在中断服务程序保护被中断任务的断点数据之后,运行用户中断服务代码之前来调用,所以通常把它叫做进入中断服务函数。

 

OSIntExit():

这个函数在中断嵌套层数计数器为0、调度器未被锁定且从任务就绪表中查找到的最高级就绪任务又不是被中断的任务时进行任务切换,否则就返回被中断的服务子程序。

 

在μC/OS-Ⅱ中通常用一个任务来完成异步事件的处理工作,而在终端服务程序中只是通过向任务发送消息的方法去激活这个任务。

 

 

 

中断级任务切换函数:

被中断任务的断电保护工具已经在终端服务程序完成了

 

程序中的临界段:

OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()这两个宏封装了系统硬件相关的关中断和开中断指令。

在临界段中,不要调用μC/OS-Ⅱ提供的功能函数,以免系统崩溃。

 

μC/OS-Ⅱ的时钟

周期性的信号源

用硬件定时器产生一个周期为毫秒级的周期性中断来实现系统时钟。最小的时钟单位就是两次终端之间间隔的时间,这个最小的时钟单位叫做时钟节拍。

硬件定时器以时钟加派为周期定时的产生中断,该中断服务程序为OSTickISR()(汇编语言),通过调用函数OSTimeTick()来完成系统在每个时钟节拍需要的工作。

μC/OS-Ⅱ在每次响应定时中断时调用OSTimeTick()做了两件事:

给计数器OSTime加1;

遍历任务控制块链表中的所有任务控制块,把各个控制块中用来存放任务延时时限的OSTCBDly变量减1,并使该项为0,不使被挂起的任务进入就绪状态。

 

函数在OSTimeTick()的任务就是每个时钟节拍了解每个任务的延时状态,使已经到了延时时限的非挂起任务进入就绪状态。

 

时间管理

任务的延时:

除了空闲任务之外的所有任务必须在任务中合适的位置调用系统提供的函数OSTimeDly(),使当前任务的运行延时(暂停)一段时间并进行一次任务调用,以让出CPU使用权。

OSTimeDly()函数参数是以时钟节拍数为单位的延时时间。

延时函数OSTimeDlyHMSM(INT8Uhours, INT8U minutes, INT8U seconds, INY16U milli);

调用了函数OSTimeDly()和OSTimeDlyHMSM()的任务,当规定的延时时间期满,或有其他任务通过调用函数OSTimeDlyResume()取消了延时时,它立即会进入就绪状态。

 

取消任务的延时:

OSTimeDlyResume()函数取消延时而进入就绪状态

OSTimeDlyResume(INT8U prio);

 

获取和设置系统时间:

OSTime记录系统发生的时钟节拍数。

在应用程序调用OSStart()时被初始化为0,每发生1各时钟节拍OSTime就加1.

INT32U OSTimeGet(void);获取OSTime的值

void OSTimeSet(INT32Uticks);设置OSTime的值

 

小结

·在μC/OS-Ⅱ中,中断服务子程序结束之后,系统将会根据情况进行一次中断级的任务调度去运行优先级别最高的就绪任务,而并不一定要持续运行被中断的任务。

·μC/OS-Ⅱ的中断允许嵌套,用全局变量OSIntNesting来记录中断的嵌套数。

·μC/OS-Ⅱ的中断服务程序的工作通常由中断激活的一个任务完成。这样做的优点是使应用程序的设计更为灵活。

·在任务中可以设置临界区的方法来屏蔽中断。设置临界区的宏有3种方法。

·μC/OS-Ⅱ的时钟通常是一个由硬件计数器定时产生周期性中断信号来实现的,每一次中断叫做一个节拍,其中断服务程序叫做节拍服务程序。

·μC/OS-Ⅱ在每个节拍服务里要遍历系统中的全部任务的任务控制块,把其中记录任务延时时间的成员OSTCBDly减1,并使延时时间的任务进入就绪状态。

·μC/OS-Ⅱ有10个函数提供了钩子函数,应用程序设计人员可在钩子函数中编写一些自己的代码。

·在μC/OS-Ⅱ进行时间管理的函数中,最重要的是延时函数OSTimeDly()和OSTimeDlyHMSM()。他们的作用不仅仅是使任务的运行停止并等待一段时间,更重要的是,他们都要调用任务调度器进行一次任务调度,这样就使低优先级别的任务有了运行的机会。

 

 

 

 

0 0
原创粉丝点击