目录

UCOSIII操作系统中断管理篇

【UCOSIII操作系统】中断管理篇

UCOSIII操作系统

UCOSIII其他内容导航不迷路

已完结

说在前面:

这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。

这篇文章是个人学习整理,如有错误请指正

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

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

我们学习的重点就是如何在UCOSIII中编写中断服务函数

中断管理的API函数

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

https://i-blog.csdnimg.cn/blog_migrate/e3c070606a9bb72da131727735f76c47.png

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在访问中断队列时,仍然需要关闭中断,但这个时间是非常短的。