临界断代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,FreeRTOS与临界断代码保护有关的函数有4个:
taskENTER_CRITICAL() ——任务级进入临界段
taskEXIT_CRITICAL() ——任务级退出临界段
taskENTER_CRITICAL_FROM_ISR() ——中断级进入临界段
taskEXIT_CRITICAL_FROM_ISR( ) ——中断级退出临界段

void vPortEnterCritical( void ) //进入临界段保护函数
{portDISABLE_INTERRUPTS();      //关闭中断uxCriticalNesting++;        //计数加1
( uxCriticalNesting == 1 ){configASSERT( ( portNVIC_INT_CTRL_REG & portVECTACTIVE_MASK ) == 0 ); //断言  可忽略}
}void vPortExitCritical( void ) //退出临界段
{configASSERT( uxCriticalNesting ); //断言  可忽略uxCriticalNesting--;           //计数减1if( uxCriticalNesting == 0 )        //当计数值=0时{portENABLE_INTERRUPTS();     //打开中断}
}

由于uxCriticalNesting变量计数的原因,可以嵌套使用临界段函数,

使用方法:

在需要运行不希望被打断的代码时的起始点前面,加入进入临界区函数,在结束位置加入退出临界区函数;
vPortEnterCritical();
需要完整运行,不被打断的代码
vPortExitCritical();

使用方法:

在需要运行不希望被打断的代码时的起始点前面,加入进入临界区函数,在结束位置加入退出临界区函数;
注意:因为临界区内运行的代码会关闭中断,所以一定要精简

中断临界段代码保护


static portFORCE_INLINE uint32_t ulPortRaiseBASEPRI( void )
{uint32_t ulReturn, ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;__asm{mrs ulReturn, baseprimsr basepri, ulNewBASEPRIdsbisb}return ulReturn;  //读出basepri的值保存在ulReturn中,退出中断临界保护需要使用
}
static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
{__asm{msr basepri, ulBASEPRI}
}

FreeRTOS临界段相关推荐

  1. FreeRTOS 临界段和开关中断

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...

  2. FreeRTOS — 临界段和开关中断

    以下内容转载自安富莱电子:http://forum.armfly.com/forum.php 1.临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行 ...

  3. freertos临界段保护

    freertos临界段保护 中断的基础知识 cortex-m里面开中断.关中断指令 关中断和开中断 进入临界段和退出临界段 中断的基础知识 嵌套: 嵌套向量中断控制器 NVIC(Nested Vect ...

  4. FreeRTOS临界段的保护

    什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段.在 FreeRTOS 里面, 这个临界段最常出现的就是对全局变量的操作,全局变量就好像是一个枪把子,谁都可以 对他开枪,但是我开 ...

  5. FreeRTOS源码分析与应用开发01:中断配置与临界段

    目录 1. 异常与中断的基本概念 1.1 异常分类 1.2 中断概述 1.2.1 中断处理宜短暂 1.2.2 临界段影响中断实时性 1.3 中断硬件基础 1.3.1 外设 1.3.2 中断控制器 1. ...

  6. 【FreeRTOS】06 临界段的保护——关中断和关调度

    本节来讲一讲FreeRTOS如何保护临界段,先讲临界段的概念,再讲保护临界段的方法. 1)临界段的概念 简单来讲,临界段是一段执行时不允许被中断(或其他任务)打断的代码:如果被打断,就有可能运行出错. ...

  7. FreeRTOS内核详解(1) —— 临界段保护原理

    什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段. 在 FreeRTOS 里面,这个临界段最常出现的就是对全局变量的操作,由于不同任务间可以切换运行,当一个任务在访问某个全局变量 ...

  8. FreeRTOS中断配置与临界段

    Cortex-M中断 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序(中断服务程序),处理完毕后又返回原被暂停的程序继续运行.Cortex- ...

  9. FreeRTOS内核实现03:临界段的保护

    目录 1. 临界段概述 1.1 什么是临界段 1.2 临界段何时会被打断 2. 关中断操作 2.1 不带中断保护 2.2 带中断保护 3. 开中断操作 4. 进入临界段操作 4.1 不带中断保护 4. ...

最新文章

  1. 【实战】OpenCV钢管计数分析与方法比较
  2. golang beego框架对运行异常的处理
  3. 临时目录 Path.GetTempFileName()
  4. Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序
  5. 【learning】快速沃尔什变换FWT
  6. QT5+ROS程序开发
  7. xpath以某个字符开始_XPATH简单使用
  8. shell基础之多功能nginx(安装、重启、停止等)
  9. php wind8.5,PHPWind Forums下载
  10. Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包
  11. html如何提取图片颜色代码,解析CSS 提取图片主题色功能(小技巧)
  12. 字符分割函数strtok
  13. 深大uooc学术道德与学术规范教育第十一章
  14. DO、DTO和VO分别是什么?
  15. //我一次黑别人的电脑时的技术经过!
  16. 如何定位Java源文件_webgisframe.java 源代码在线查看 - 实现网络GPS定位车辆的位置 资源下载 虫虫电子下载站...
  17. 计算机的应用软件在哪里,电脑软件卸载在哪里
  18. 24bpp RGB对应的十六进制值和颜色(节选)
  19. 模仿新浪微博雷达搜索动画效果
  20. 教你用Python定时抓取微博评论,相当牛逼的技术

热门文章

  1. mysql动态update语句,mysql – SQL:具有动态列值赋值的update语句
  2. iOS UIFont 的学习与使用
  3. 【CVPR2022】Lite Vision Transformer with Enhanced Self-Attention
  4. 广州天象网络技术有限公司不努力,你拿什么坐在奔驰车上哭?
  5. 盒子模型(CSS重点)-盒子边框(border)
  6. 给盒子添加花样边框的方法
  7. 阿里云刘珅孜:云游戏带来的启发——端上创新
  8. NC后台任务插件开发代码
  9. SugarCRM源码分析之数据库连接
  10. GPT-4最震撼我的一点