http://blog.csdn.net/zhanglianpin

今天又看了一下ucos保护临界段代码,ucos是利用禁止中断来保护临界段的。

ucos给我们提供了三种方法:

一:直接关中断和直接开中断。即成对使用,保证临界段的安全。

二:先把原来的中断状态压入栈中,然后再关闭中断。恢复时直接从栈中返回原来存储的中断状态。

三:先保存原来的中断状态到一个变量中,然后再关闭中断。

三种情况我都说完了,下面我说一下为什么有这三种形态:

其实,这三种方法从应用上可分为两种,可嵌套和不可嵌套。

其实大家分析一下,所谓保护临界段代码就是关中断,在操作系统内部本身就是关中断、然后开中断。这是没有问题的,但大家想一下,操作系统给用户提供了一些编程接口,当用户希望用同样关中断的方法来保护共享数据时。比如用户写的代码如下:

关中断

调用系统服务

其他操作

开中断

大家想一下,本来用户想保存从用户关中断和开中断这些代码的,不过你调用了操作系统的服务,如果你是用的方法是不可嵌套的,那在退出操作系统代码时已经开中断了。违背了用户的愿望。所以我们操作系统提供可嵌套的关 开中断的方法。这种嵌套是针对高层应用程序的。在操作系统内部这个嵌套是没有任何意义的。

那有一点疑惑可能你会提出,那中断最好是支持嵌套了,是,这个没错。但大家想一想我们想嵌套,就必须保存原来的状态寄存器的值,而前提是机器要有支持读状态寄存器的指令。如果没有这样的指令,只能采取第一种最不好的方案了。

这也是为什么ucos要分这三个情况。它是定义了一个宏,关中断和开中断时用这个宏做。这个宏用条件编译实现具体的关中断和开中断的方法。

ucos OS_ENTER_CRITICAL .相关推荐

  1. ucos OS_ENTER_CRITICAL

    今天又看了一下ucos保护临界段代码,ucos是利用禁止中断来保护临界段的. ucos给我们提供了三种方法: 一:直接关中断和直接开中断.即成对使用,保证临界段的安全. 二:先把原来的中断状态压入栈中 ...

  2. UCOS源码剖析 (一)

    UCOS源码详解 uC/OS-II源码分析(总体思路 一) 首先从main函数开始,下面是uC/OS-II main函数的大致流程: main()      { OSInit(); TaskCreat ...

  3. cortex-M3 的SVC、PendSV异常,与操作系统(ucos实时系统)

    SVC异常是?  PendSV异常是?  ucos 任务切换时机?  ucos 如何满足实时性(实现)?  ucos中,systick的优先级? SVC和PendSV SVC(系统服务调用,亦简称系统 ...

  4. ucos中的三种临界区管理机制

    熟悉ucos,或者读过Jean.J.Labrosse写过的ucos书籍的人,一定会知道ucos中著名的临界去管理宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(). 同样 ...

  5. zynq中mgtx应用_基于ZYNQ的UCOS移植(TCP通讯)

    周五在某小徐处借到了一块Zedboard开发板,平时在公司没有机会做SDK开发的笔记,今天就趁着这块开发板简要记录一些SDK的基本操作.一.功能简介 通过第三方库创建SDK工程 在ZYNQ-UCOS中 ...

  6. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理

    uCOS II是一个源码公开.可移植.可固化.可剪裁和抢占式的实时多任务操作系统,其大部分源码是用ANSI C编写,与处理器硬件相关的部分使用汇编语言编写.总量约200行的汇编语言部分被压缩到最低限度 ...

  7. UCOS内核结构学习笔记

    呵呵,大家好,暑假一直在实验室,校园网一直打不开我的BLOG,全国大赛结束后,我虽然没有参加,但是我也是经历了的,只是没有参赛而已.呵呵,感觉全国大赛不是比各高校学生的能力,而是各高校老师的能力.相信 ...

  8. UCOS II移植到STM32F103开发板

    早期嵌入式开发没有嵌入式操作系统的概念 ,直接操作裸机,在裸机上写程序,比如用51单片机基本就没有操作系统的概念.通常把程序分为两部分:前台系统和后台系统. 简单的小系统通常是前后台系统,这样的程序包 ...

  9. UCOS/UCOSII基础知识

    ◆ 任务,在UCOS-ii实时系统中,一个任务其实就是一个线程,该任务可以认为CPU完全属于它自己.UCOS-ii中的任务拥有自己的堆栈和CPU寄存器,并且赋予一定的优先级,在UCOS-ii中,它可能 ...

最新文章

  1. C语言指针调用函数_只愿与一人十指紧扣_新浪博客
  2. 计算机网络安全课程好吗,浅议计算机网络课程教学问题与对策 计算机网络安全有哪些...
  3. LPTHW 笨方法学习python 16章
  4. 【视频教程】JeeWx 微信开发入门视频
  5. CVPR 2020 | 3D目标检测泛化问题研究
  6. 网络(15)-粘包拆包,Netty解决方案及远洋通信中的解决方案!超实用
  7. 【图像处理】MATLAB:图像分割
  8. iOS精品源码,GHConsole图片浏览器圆形进度条音视频传输连击礼物弹出动画
  9. java中NULL与 的区别
  10. 加班熬夜一个月,终于把所有Python库整理齐了,祝你早日学成
  11. 01-解决Tomcat中文乱码问题
  12. Android 身份证拍照 识别 文字识别 (百度)
  13. 电影文件的合并与分割
  14. python求平均值_如何用python求平均值
  15. 097 《终结拖延症》简记
  16. 1823. 找出游戏的获胜者( 约瑟夫环问题 )
  17. Excel单元格格式设置——日期型切换语种
  18. 读《Linux应急响应》笔记(未完待续)
  19. 如何基于泄露数据库的查询:脱库数据的整理和查询
  20. 最新发布!校园视频监控新版国标抢先看

热门文章

  1. 边沿检测电路的多种实现
  2. apt 安装 openssl
  3. 台式机CPU型号后缀含义
  4. 【UE4学习】04——官方教程代码
  5. 暴风雨后清晨书所见所闻【明书】
  6. OSChina 周六乱弹 ——快来看美国总统候选人怎么被打脸
  7. java找不到java.dll(两种情况)
  8. PAT日志 1011
  9. .Audio Focus机制以及AudioManager的使用
  10. 7-5 查询自动售货机中商品的价格