UCOSII原理与应用----中断与时钟

中断:在任务运行过程中,应内部或外部异地事件的请求中止当前任务,而去处理异步事件所要求的过程叫做中断。
中断服务子程序:应中断请求而运行的程序。
中断向量:中断服务子程序的入口地址。
UCOSII的中断过程:系统收到中断请求后,如果这事CPU处于中断允许状态(中断开放),系统会中止正在运行的当前任务,中断向量的指向转而去运行中断服务子程序。当中断服务子程序的运行结束后,系统会根据情况返回到被中止的任务继续指向。或转向另外一个更高优先级级别的就绪任务。
对于可剥夺型UCOSII内核来说。系统会根据情况进行一次任务调度去运行优先级别最高的就绪任务,而并不一定是接续运行被中断的任务。
UCOSII系统允许中断嵌套,即高优先级别的中断源的中断请求可以中断低优先级的中断服务的运行。为了记录中断嵌套的层数,UCOSII定义一个全局变量OSInt-Nesting
中断响应过程图:
在这里插入图片描述

OSIntEnter()的调用通常发生在中断服务程序保护了被中断任务的断点数据之后,运行用户中断服务代码之前,所以称之为进入中断服务函数
另外一个中断服务程序中要调用的函数叫做退出中断服务函数OSIntExit()。
在这里插入图片描述

一个中断服务子程序的流程图:
在这里插入图片描述

在UCOSII中,通常用一个任务去处理异步事件的处理,而在中断服务程序中只是通过向任务发消息来激活这个任务。

UCOSII的时钟
任何操作系统都要提供一个周期性的信号源,以供系统处理延迟、超时等于时间相关的事件。
这个时钟周期性的信号源叫做时钟。
UCOSII于大部分计算机系统一样,用硬件定时器产生一个周期为毫秒级的周期性中断来实现系统时钟。最小的时钟单位是两次中断之间相隔的时间。最小时钟单位叫时钟节拍(Time Tick)。由于嵌入式系统的任务是一个无限循环,并且UCOSII还是一个抢占式内核,所以为了使更高优先级别任务不至于独占CPU,可以给其他任务优先级低的任务获得CPU使用权的机会。
UCOSII规定:除了空闲任务之外的所以任务必须在任务中的合适位置调用系统提供的函数OSTimeDly(),使当前任务的运行延时(暂停)一段时间并进行一次任务调度,以让出CPU使用权。

总结:
1、UCOSII中,中断服务子程序运行结束之后,系统会根据情况进行一次中断级的任务调度去运行优

2、先级别最高的就绪任务,但不一定会接续运行被中断的任务。
UCOSII的中断允许嵌套,用全局变量OSIntNesting来记录中断嵌套数。
UCOSII的中断服务程序的工作通常是由中断激活的一个任务来完成,这样使设计应用程序更加灵活。

3、在任务中科院用设置临界区的方法来屏蔽中断。设置临界区的宏有三种实现方法。

4、UCOSII的时钟通常有硬件计算机定时产生周期性中断信号来实现的,每一次中断叫做一个节拍,其中断服务函数程序叫节拍服务程序。

5、UCOSII在每一个节拍服务里要遍历系统中全部任务的任务控制块,把其中记录任务延时时间得成员OSTCBDly减1,并延时时间到的任务进入就绪状态。
6、UCOSII有10个钩子函数,应用程序设计任务可以在钩子函数中编写自己的一些代码。

7、UCOSII进行时间管理的函数中,最重要的是延时函数OSTimeDly()和OSTimeDlyHMSM()。他们的作用不仅仅是使任务的运行停止等待一段时间,更重要的是,他们到要调用任务调度器进行一次任务调度。这样使优先级别任务有了运行机会。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值