3.uCOSIII中断管理
来源:互联网 发布:sql 求平均值 编辑:程序博客网 时间:2024/05/01 07:48
这是学习中断管理时Onenote的笔记:
- 概述:
- 关中断后中断控制器会锁存中断请求,重新开中断后CPU会响应中断;
- 实时系统中应尽可能减少关中断的时间;
- 中断服务函数的一般操作:
- 中断预处理:
- 进入中断时先关中断,之后将CPU寄存器保存到任务堆栈内,这些对C程序员是透明的;
- 递增OSIntNestingCtr值,可通过OSIntEnter()函数,表示多一层嵌套的中断;
- 若此中断为第一层中断,还应保存此时的堆栈指针值;
- 清除中断请求标志位;
- 中断服务:
- 重新开中断(根据实际需要来选择);
- 进行相关的处理,但原则上应该尽量精简,最好只是发布信息,实际工作由相关任务来做;
- 中断后处理:
- 调用OSIntExit()函数:递减OSIntNestingCtr,若退为0时,系统内核判断是否使某个高优先级任务就绪;
- 若有高优先级任务就绪,此时中断不会返回之前任务,而是直接执行高优先级任务;?????????
- 恢复之前寄存器,从中断中返回;
- 中断预处理:
- 无内核中断服务程序:
- 简介:
- 通常只是用来处理非常简单的事件,内容短小精悍;
- ISR_Func内不重新开中断,防止中断被打断,且此种中断优先级较高,而OS内核也不可以关闭此中层次中断;
- 不记录中断嵌套级数,故而内核不知此中断发生;
- 此种中断只保护该中断所要用到的寄存器,而其他不会保护;
- 简介:
- 多优先级中断(中断管理):
- 以16级优先级中断为例,所有中断优先级都高于任务优先级;
- 级别12~15不使用任何Kernel的函数,Kernel也无法关闭这些中断(会打断临界区操作,不过其不使用Kernel函数,所以通常没问题);
- 两种中断服务程序:
- 所有中断源共用ISR_Func:
- 所有中断源共用一个ISR_Func,中断时中断控制器会根据优先级对中断源进行排序;
- ISR_Func内根据中断源选择对应处理函数;
- 循环处理完所有中断请求后才退出中断,关中断时间长;
- 每个中断源专用ISR_Func:
- 主要使用的一种方式,前面讨论的方式,不详述;
- 所有中断源共用ISR_Func:
- 直接发布、延迟发布:
- 当OS_CFG_ISR_POST_DEFERRED_EN为0时是直接发布,否则为延迟发布;
- 直接发布:
- 通过关中断的方式保护临界代码;
- 此时仅在处理定时器时对任务调度器上锁;
- 延迟发布:
- 通过给任务调度器上锁方式保护临界区,而很少存在关闭中断的情况;
- 对于信号量等内核对象,在ISR_Func内先存入缓冲队列/中断队列,之后通过中断队列处理任务进行发布;
- 中断队列处理函数访问中断队列时应关闭中断;
- 推荐使用延迟发布,此时关中断时间会很短;
1 0
- 3.uCOSIII中断管理
- ucosIII中断代码管理
- UCOSIII中断和时间管理
- ucosIII 中断、临界区与时间管理
- UCOSIII操作系统的中断和时间管理
- UCOSIII 中断
- UCOSIII-中断
- UCOSIII中断和时间管理(待更)
- UCOSIII-任务管理(上)
- UCOSIII 任务管理(中)
- UCOSIII 任务管理(下)
- 2.uCOSIII任务管理
- ucosiii 时间管理
- UCOSIII任务管理
- UCOSIII存储管理
- ucosiii时间管理
- ucosiii时间管理
- UCOSIII任务管理
- Java初学者:技术文章(类的继承)
- "围观"设计模式(15)--结构型之桥梁模式(Bridge Pattern)
- Java继承内存分配
- 工具类系列-StringSimpleRedisUtil
- ImageLoader缓存图片
- 3.uCOSIII中断管理
- 数据库中的分组函数+练习题
- 测试hibernate时报错Field 'id' doesn't have a default value
- iOS开发_iPhone 实现剪贴板操作_iPhone 复制粘贴功能
- 栈及实现(C语言)以及中缀式到后缀式的转换实例
- 代码静态分析工具 --- CppCheck
- c++引用的总结
- android动态注册广播,监听网络状态变化,判断网络模式
- QTP中与时间同步点:Sync、Wait、Waitproperty、Exist