2.uC/OS-II中断及时钟节拍


中断

uC/OS-II的中断服务子程序要用汇编程序来编写。下面是用户中断服务子程序的一般处理过程的伪代码:

保存全部CPU寄存器;

调用OSIntEnterOSIntNesting直接加1

中断服务;

调用OSIntExit

恢复所有CPU寄存器;

执行中断返回指令;

uC/OS-II的中断处理与PC的中断处理类似。当发生中断时,首先保护现场,CPU寄存器入栈,再执行中断服务子程序,之后恢复现场,CPU寄存器出栈,最后执行中断返回。但是uC/OS-II需要知道用户在做中断服务,因此用户应该调用OSIntEnter(),或者将全局变量OSIntNesting直接加1.内核通过判断OSIntNesting的值来了解中断嵌套的情况。中断服务子程序退出时要调用脱离中断函数OSIntExit(),OSIntExit()首先应该将OSIntNesting1,如果中断服务程序使更高优先级的任务就绪且没有中断嵌套,还必须进行中断级的任务调度,使高优先级的就绪任务运行。

uC/OS-II的时钟节拍

uC/OS需要用户提供周期性信号源,用于实现时间延时和确认超时。uC/OS-II的时钟节拍(clock tick)是特定周期性中断。中断之间的时间间隔取决于不同的应用,一般在10ms20ms之间。时钟的节拍中断使得内核可以将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供等待超时的依据。uC/OS-II的时钟节拍中断类似于一个定时器中断,事实上在移植到特定的处理器上时,通常都用目标处理器的定时器做时钟节拍源。每个时钟节拍中断到来时调用时钟节拍中断服务将任务延时做一次裁决。

OSTimtick()是时钟节拍中断服务函数,函数中大量的工作是给每个用户任务控制块OS_TCB中的时间延时项OSTCBDly1(如果该项不为0的话)。OSTimTick()从OSTCBList开始,沿着OS_TCB链表做,一直到空闲任务。当任务的任务控制块中的时间延时项OSTCBDly减到了0,这个任务就进入了就绪态。而被挂起的任务则不会进入就绪状态。OSTimTick()的执行时间直接与应用程序中建立了多少任务成正比。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值