实时操作系统UCOS学习笔记9----UCOSIII 中断和时间管理

本章讲解UCOSIII的中断处理和时间管理,在使用UCOS操作系统的时候我们对于中断服务程序的处理就要做一点修改,这个和我们不使用操作系统的时候是不同的。我们在对某些任务做延时的时候会使用到一些延时函数,本章就讲解一下这两个知识点。

1、中断管理

1.1 UCOSIII 中断处理过程

在STM32中是支持中断的,中断是一个硬件机制,主要用来向CPU通知一个异步事件发生了,这时CPU就会将当前CPU寄存器值入栈,然后转而执行中断服务程序,在CPU执行中断服务程序的时候有可能有更高优先级的任务就绪,那么当退出中断服务程序的时候,CPU就会直接执行这个高优先级的任务。
UCOSIII是支持中断嵌套的,即高优先级的中断可以打断低优先级的中断,在UCOSIII中使用OSIntNestingCtr来记录中断嵌套次数,最大支持250级的中断嵌套,每进入一次中断服务函数OSIntNestingCtr就会加1,当退出中断服务函数的时候OSIntNestingCtr就会减1.
我们在编写UCOSIII的中断服务程序的时候需要使用到2个函数OSIntEnter()和OSIntExit(),OSIntExit()函数我们前面已经讲过了,是中断级任务调度器,OSIntEnter()的函数代码如下:

在这里插入图片描述

从上面代码我们可以看出OSIntEnter()函数其实就是将OSIntNestingCtr进行简单的加1操作,用来记录中断嵌套的次数而已。

那么我们在UCOSIII环境中如何编写中断服务函数呢?我们按照下面所示代码编写中断服务函数:
在这里插入图片描述

  1. 中断服务程序,XXX为不同中断源的中断函数名字。
  2. 首先调用OSIntEnter()函数来标记进入中断服务函数,并且记录中断嵌套次数加1.
  3. 这部分就是我们需要自行编写的中断服务程序了,也就是我们平时不使用UCOSIII时的中断服务程序。
  4. 退出中断服务函数的时候调用OSIntExit(),发起一次中断级任务切换。

1.2 直接发布和延迟发布

相比UCOSII,UCOSIII对从中断发布消息或者信号的处理有2种模式:直接发布和延迟发布。
我们可以通过宏OS_CFG_ISR_POST_DEFERRED_EN来选择使用直接发布还是延迟发布。宏OS_CFG_ISR_POST_DEFERRED_EN在文件os_cfg.h中有定义,当定义为0时使用直接发布模式,定义

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值