zoukankan      html  css  js  c++  java
  • STM32F104ZET6之ucosⅢ临界区保护

    UCOSⅢ对临界区的处理方法

    • 1.中断开关的方式
      临界区一旦被访问,那么就关闭所有中断,防止执行过程被更高级中断打断
      保证了数据的同步性,但可能会导致一些紧急事件未能及时处理
      OS_ENTER_CRITICAL()简单地关中断,OS_EXIT_CRITICAL()简单地开中断。
      这种方式虽然简单高效,但无法满足嵌套的情况。
      如果有多层临界区保护,在退出内层临界区时就会开中断,使外层的临界区也失去保护。
      不推荐使用。

    • 2.压栈的方式
      临界区在被访问过程中,被中断打断,就对该状态进行压栈处理,保证各个事件按等级正常运行,
      但数据无法保证同步性,压栈的数据在出栈时,上次的中断可能已经修改了数据,将数据出栈没有什么意义,
      不推荐使用。

    • 3.保存在本地局部变量.
      在关中断前,使用局部变量保存中断状态。

    一般都用模式三,使用方法如下

    //1.定义一个局部变量cpu_sr
    CPU_SR  cpu_sr = (CPU_SR)0;
    //也可直接调用宏定义一个局部变量cpu_sr
    //关于这个宏,在cpu.h中303行左右,如下
    //#if     (CPU_CFG_CRITICAL_METHOD == CPU_CRITICAL_METHOD_STATUS_LOCAL)
    //#define  CPU_SR_ALLOC()             CPU_SR  cpu_sr = (CPU_SR)0
    //#else
    //#define  CPU_SR_ALLOC()
    //#endif
    //调用宏定义局部变量
    //CPU_SR_ALLOC();
    
    //2.进入临界区,关中断
    OS_ENTER_CRITICAL();        
    printf("Hello world
    ");
    //3.退出临界区,开中断
    OS_EXIT_CRITICAL(); 
    

    注意:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()注意要成对使用。

  • 相关阅读:
    HTML5 WebSocket 技术介绍
    腾迅平台接入笔记
    Windows 2008 R2 64位上安装wamp失败的原因
    海伦公式
    ANE接入平台心得记录(安卓)
    ANE原生代码的调试(安卓)
    一行代码远离Google浏览器兼容问题的困扰
    U3D的飞船太空射击例子中,使用coroutine
    这几天在搞UNITY3D,感觉回到了AS2
    网页动物园2.0发布,经过几个月的努力,采用JAVA编写!
  • 原文地址:https://www.cnblogs.com/risesource/p/11954690.html
Copyright © 2011-2022 走看看