zoukankan      html  css  js  c++  java
  • 【STM32】临界区进入退出宏 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()

    宏函数展开为:

    1 #define  OS_CRITICAL_METHOD   3
    2 
    3 #if OS_CRITICAL_METHOD == 3
    4 #define  OS_ENTER_CRITICAL()  {cpu_sr = OS_CPU_SR_Save();}
    5 #define  OS_EXIT_CRITICAL()   {OS_CPU_SR_Restore(cpu_sr);}
    6 #endif

    OS_CPU_SR_Save() 和 OS_CPU_SR_Restore(cpu_sr) 在os_cpu_a.asm 中,为移植函数:

     1 OS_CPU_SR_Save                 //PRIMASK缺省值0 中断屏蔽寄存器  =1 关闭所有可屏蔽异常 只剩下NMI和硬fault可以响应
     2     MRS     R0, PRIMASK        //MRS指令用于将状态寄存器的内容传送到通用寄存器中 读取PRIMASK到R0中,R0为返回值
     3 
     4     CPSID   I                  //PRIMASK=1,关中断(NMI和硬fault可以响应
     5     BX      LR                 //返回   BX带状态切换的条状指令
     6 
     7 OS_CPU_SR_Restore              //读取R0到PRIMASK中,R0为参数
     8 
     9     MSR     PRIMASK, R0
    10     BX      LR

    说明:

    中断屏蔽寄存器
    PRIMASK
    这个寄存器只有一个位,置1后,将关闭所有可屏蔽中断的异常,只剩NMI和硬fault,默认值为0;

    进入临界区,将关中断前的中断屏蔽状态保存到局部变量中。

    退出临界区,将之前保存的中断屏蔽状态恢复到PRIMASK中断屏蔽寄存器中。

  • 相关阅读:
    Log4j学习
    HttpURLConnection请求
    正则表达式验证中文、图片上传
    freemarker学习
    参数中带有“&”符号问题
    禁止打印页面
    myEclipse 界面窗口打不开问题
    屏蔽网页右键
    分享功能
    table表格某一td内容太多导致样式混乱的解决方案
  • 原文地址:https://www.cnblogs.com/jxndsfss/p/10748371.html
Copyright © 2011-2022 走看看