uC/OS-II的中断和时钟

前提: uC/OS-II是一个可剥夺型内核,CPU每时每刻都处理优先级最高的任务。
主要内容:
(1)uC/OS-II的中断管理和中断服务程序的结构
(2)uC/OS-II的系统时钟及实现方法
(3)uC/OS-II的时间管理服务-----延时、取消延时

一、uC/OS-II的中断

中断: 停止当前的事,去处理异常要求事件。

1、uC/OS-II的中断过程

在系统运行过程中,当系统中断是开放的情况,系统才能响应中断。当系统响应中断,系统就将当前任务的所有信息保存下来,去执行中断服务子程序,执行完毕之后,查找优先级最高的任务,若没有优先级最高的就去执行自己之前的任务,若有就要去执行优先级最高的任务。
uC/OS-II系统允许中断嵌套,因为硬件的中断也是有优先级的。
在uC/OS-II中,通常用一个任务来进行异步事件的处理,在中断服务程序中就是去激活这个任务。

2、中断级任务切换函数

函数为:OSIntCtxSw() 这个函数和任务级切换函数一样类似,并且代码和后者的后半部分代码一样了。在这个函数里主要做的工作是:
在中断服务程序中,对被中断任务的断点进行保护。

3、应用程序的临界段

临界段概念: 不希望被中断的代码段。
程序表示如下:

OS_ENTER_CRITICAL();       //关中断
······        //用户代码,也即临界段
OS_EXIT_CRITICAL();       //开中断

上面的关中断和开中断为宏,在系统移植时需要考虑修改,这部分与硬件有关。

二、uC/OS-II的时钟

时钟概念: 任何操作系统必须有一个周期性的时钟源,以供系统处理诸如延时、超时等与时间有关的事件,这个周期性的信号源叫做时钟。
系统时钟来源: 硬件定时器产生一个周期为毫秒级的周期性中断。例如:在51单片机中可以使用定时器1作为系统时钟来源,在STM32中可以使用滴答定时器作为系统的时钟来源。

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

OSTimeTick()函数中主要做以下两件事:
(1)计数器的OSTime加一
(2)遍历任务控制块链表中的所有任务控制块,把各个任务控制块中用来存放任务延时时限的OSTCBDly变量减一,病史该项为0,同时又不是被挂起的任务进入就绪状态。简单点说就是,每个时钟节拍都要去了解每个任务的延时状态,使其中已经到了延时时限的非挂起任务进去就绪状态。

三、时间管理

1、任务的延时

嵌入式系统的任务是一个无限循环,uC/OS-II是一个抢占式的内核,为了不至于使最高优先级的任务独占CPU,给别的任务分配一点时间,uC/OS-II规定:除了空闲任务之外,任何任务必须在合适的地方调用OSTimeDly()或者OSTimeDlyHMSM()函数,使当前任务的运行延时(暂停一段时间)并进行一次任务调度,以让出CPU的使用权。
当调用上面函数的任务在规定的延时时间期满,或者有其他任务把延时取消了,那这个任务就进去到了就绪状态。

2、取消任务的延时

函数:INT8U OSTimeDlyResume(INT8U prio),这个函数可以取消某个优先级任务中的延时。

3、获取和设置系统时间

系统的时间节拍使可以修改的。任务都是按照节拍在运行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值