ucosII系统原子操作中产生调度的思考
来源:互联网 发布:安徽慧达通信网络 编辑:程序博客网 时间:2024/05/21 10:27
对于ucosII系统,通过OS_ENTER_CRITICAL()关闭中断,
只要你在关闭中断后不是执行的死循环,那么函数始终会运行完,然后返回,(或者任务运行到for循环的最后),这里可以看到虽然中断关了,但是始终会回到任务的循环中来,而通常任务都是有延时的【OSTimeDly(n)】. 通过源码可以看到在延时函数OSTimeDly()里会关闭中断,然后会开启中断的.
原子操作:原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。
在ucosII中,OS_ENTER_CRITICAL()关闭中断后,理论上就是原子操作了,因为只要你不要它调度,系统不会调度了.那么好,如果在关闭中断后你不手动去执行调度、或者你不调用能够引起直接运行或者间接运行到调度函数OS_Sched(),(这里还得假设你调用的函数里面无开启中断的语句,不然可以产生中断的!),那么在你手动开启中断之前【OS_EXIT_CRITICAL()】,确实是不能被中断的,实现了原子操作.
但是如果你不小心调用了可以开启中断的函数,或者导致执行OS_Sched()函数的代码,现在好了,时钟中断会将所有任务的延时减一,并使该就绪的任务就绪,如果你的任务优先级不是最高的,而且比你高的优先级的任务已经就绪了,系统就调度了.本次原子操作失败!被打断了! 这样的情况其实是有可能不小心导致它发生的.在实际应用中应该注意这个问题.
- ucosII系统原子操作中产生调度的思考
- UCOSII学习笔记:任务调度(摘自原子教程)
- gabor原子的产生
- 原子操作integer:msg.what值的产生
- 关于ucosII中断中任务调度
- 关于银行调度系统的思考:
- 我看ucosii的任务调度
- ucosii实时操作系统的任务调度
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- JVM中复杂对象的原子操作
- 多线程程序中操作的原子性
- 多线程程序中操作的原子性
- struts的学习笔记-1
- Java GC 日志详解
- 怎样使用android sdk帮助文档
- 阿赵的文章Mecanim动画系统入门
- 窗体大小的改变与控件
- ucosII系统原子操作中产生调度的思考
- 通信系统概论---通信系统概述
- JZ0SJ: Metadata accessor information was not found on this database.
- 轻量级jquery scrollLoading 延迟加载使用
- 全球著名互联网企业背后的开源力量
- XP下如何为JDK配置环境变量
- HDU 1047 Integer Inquiry(高精度加法)
- 数据结构有什么用
- Ubuntu下安装搜狗拼音输入法