UCOSIII操作系统
- UCOSIII操作系统——中断管理篇
- 中断管理的API函数
- 中断延迟发布
- 直接发布
- 延迟发布
【【UCOSIII操作系统】中断管理篇】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)任务信号量
【UCOSIII操作系统】事件篇
【UCOSIII操作系统】临界段篇
【UCOSIII操作系统】软件定时器篇
【UCOSIII操作系统】内存管理篇
已完结
说在前面:UCOSIII操作系统——中断管理篇 我们知道,在系统初始化的时候有一个中断服务管理任务,我们如果使用了关于中断的东西,就把os_cfg.h文件中的宏OS_CFG_ISR_POST_DEFERRED_EN置1使能中断服务管理任务。
这个内容不适合0基础的人,因为这里只讲了应用层面的东西,并没有深入内核讲解,所以要从零开始学UCOSIII的朋友,可以先去学完入门内容,再来观看这个笔记加深印象。
这篇文章是个人学习整理,如有错误请指正
我们学习的重点就是如何在UCOSIII中编写中断服务函数
中断管理的API函数
函数 | 描述 |
---|---|
OSIntEnter() | 进入中断 |
OSIntExit() | 退出中断 |
文章图片
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在访问中断队列时,仍然需要关闭中断,但这个时间是非常短的。