UCOSIII其他内容导航不迷路
UCOSIII操作系统-简介
UCOSIII操作系统——任务篇(1)创建任务
UCOSIII操作系统——任务篇(2)相关API函数
UCOSIII操作系统——系统初始化篇(1)系统初始化
UCOSIII操作系统——系统初始化篇(2)CPU,SysTick,内存初始化
UCOSIII操作系统——硬件初始化篇(1)硬件初始化以及开始运行系统
UCOSIII操作系统——消息队列篇(1)消息队列
UCOSIII操作系统——消息队列篇(2)任务消息队列
UCOSIII操作系统——信号量与互斥量篇(1)信号量
UCOSIII操作系统——信号量与互斥量篇(2)互斥量
UCOSIII操作系统——信号量与互斥量篇(3)任务信号量
正在更新整理…

说在前面:
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正

UCOSIII操作系统——中断管理篇

我们知道,在系统初始化的时候有一个中断服务管理任务,我们如果使用了关于中断的东西,就把os_cfg.h文件中的宏OS_CFG_ISR_POST_DEFERRED_EN置1使能中断服务管理任务。
我们学习的重点就是如何在UCOSIII中编写中断服务函数

中断管理的API函数

函数 描述
OSIntEnter() 进入中断
OSIntExit() 退出中断

UCOSIII操作系统——中断管理篇
UCOSIII是支持中断嵌套的,即高优先级的中断可以打断低优先级的中断,在UCOSIII中使用OSIntNestingCtr来记录中断嵌套次数,最大支持250级的中断嵌套,每进入一次中断服务函数OSIntNestingCtr就会加1,当退出中断服务函数的时候OSIntNestingCtr就会减1。

中断延迟发布

相比UCOSII,UCOSIII对从中断发布消息或者信号的处理有两种模式:直接发布和延迟发布两种方式。我们可以通过宏OS_CFG_ISR_POST_DEFERRED_EN来选择使用直接发布还是延迟发布。宏OS_CFG_ISR_POST_DEFERRED_ EN在os_cfg.h 文件中有定义,当定义为0时使用直接发布模式,定义为1的时候使用延迟发布模式。
不管使用那种方式,我们的应用程序不需要做出任何的修改,编译器会根据不同的设置编译相应的代码。

直接发布

在前面提到的OSTimeTick()、OSSemPost()、OSQPost() 、OSFlagPost() 、OSTaskSemPost()、OSTaskQPost()、OSTaskSuspend()和OSTaskResume()等这些函数,在中断里直接调用,如果没有使用中断延迟发布,那么调用这些函数意味着进入一段很长的临界段,也就要关中断很长时间。

延迟发布

使能中断延时发布,可以将中断级发布转换成任务级发布,而且在进入临界段时也可以使用锁调度器代替关中断,这就大大减小了关中断时间,有利于提高系统的实时性(能实时响应中断而不受中断屏蔽导致响应延迟)。当设置宏OS_ CFG_ ISR_ POST_ DEFERRED EN为1的时候,UCOSII不是通过关中断,而是通过给任务调度器上锁的方法来保护临界段代码,在延迟发布模式下基本不存在关闭中断。
配置宏就行,具体代码不需要用户写,系统会根据我们的配置,自动做出响应

  • 直接发布和延迟发布的对比
    直接发布模式下,UCOSIII通过关闭中断来保护临界段代码;
    延迟发布模式下,UCOSIII通过锁定任务调度来保护临界段代码。在延迟发布模式下,UCOSIII在访问中断队列时,仍然需要关闭中断,但这个时间是非常短的。

相关文章:

  • 2021-11-04
  • 2021-08-13
  • 2021-07-06
  • 2021-12-08
  • 2021-06-26
  • 2021-10-09
  • 2021-08-29
猜你喜欢
  • 2021-09-09
  • 2022-03-08
  • 2022-12-23
  • 2021-09-24
  • 2021-09-28
  • 2021-12-10
  • 2022-12-23
相关资源
相似解决方案