FreeRTOS临界段
临界断代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,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临界段相关推荐
- FreeRTOS 临界段和开关中断
以下转载自安富莱电子: http://forum.armfly.com/forum.php 临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码 的执行不被 ...
- FreeRTOS — 临界段和开关中断
以下内容转载自安富莱电子:http://forum.armfly.com/forum.php 1.临界段 代码的临界段也称为临界区,一旦这部分代码开始执行,则不允许任何中断打断.为确保临界段代码的执行 ...
- freertos临界段保护
freertos临界段保护 中断的基础知识 cortex-m里面开中断.关中断指令 关中断和开中断 进入临界段和退出临界段 中断的基础知识 嵌套: 嵌套向量中断控制器 NVIC(Nested Vect ...
- FreeRTOS临界段的保护
什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段.在 FreeRTOS 里面, 这个临界段最常出现的就是对全局变量的操作,全局变量就好像是一个枪把子,谁都可以 对他开枪,但是我开 ...
- FreeRTOS源码分析与应用开发01:中断配置与临界段
目录 1. 异常与中断的基本概念 1.1 异常分类 1.2 中断概述 1.2.1 中断处理宜短暂 1.2.2 临界段影响中断实时性 1.3 中断硬件基础 1.3.1 外设 1.3.2 中断控制器 1. ...
- 【FreeRTOS】06 临界段的保护——关中断和关调度
本节来讲一讲FreeRTOS如何保护临界段,先讲临界段的概念,再讲保护临界段的方法. 1)临界段的概念 简单来讲,临界段是一段执行时不允许被中断(或其他任务)打断的代码:如果被打断,就有可能运行出错. ...
- FreeRTOS内核详解(1) —— 临界段保护原理
什么是临界段 临界段用一句话概括就是一段在执行的时候不能被中断的代码段. 在 FreeRTOS 里面,这个临界段最常出现的就是对全局变量的操作,由于不同任务间可以切换运行,当一个任务在访问某个全局变量 ...
- FreeRTOS中断配置与临界段
Cortex-M中断 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序(中断服务程序),处理完毕后又返回原被暂停的程序继续运行.Cortex- ...
- FreeRTOS内核实现03:临界段的保护
目录 1. 临界段概述 1.1 什么是临界段 1.2 临界段何时会被打断 2. 关中断操作 2.1 不带中断保护 2.2 带中断保护 3. 开中断操作 4. 进入临界段操作 4.1 不带中断保护 4. ...
最新文章
- 【实战】OpenCV钢管计数分析与方法比较
- golang beego框架对运行异常的处理
- 临时目录 Path.GetTempFileName()
- Boost:测试BOOST_BIND_NO_PLACEHOLDERS的程序
- 【learning】快速沃尔什变换FWT
- QT5+ROS程序开发
- xpath以某个字符开始_XPATH简单使用
- shell基础之多功能nginx(安装、重启、停止等)
- php wind8.5,PHPWind Forums下载
- Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包
- html如何提取图片颜色代码,解析CSS 提取图片主题色功能(小技巧)
- 字符分割函数strtok
- 深大uooc学术道德与学术规范教育第十一章
- DO、DTO和VO分别是什么?
- //我一次黑别人的电脑时的技术经过!
- 如何定位Java源文件_webgisframe.java 源代码在线查看 - 实现网络GPS定位车辆的位置 资源下载 虫虫电子下载站...
- 计算机的应用软件在哪里,电脑软件卸载在哪里
- 24bpp RGB对应的十六进制值和颜色(节选)
- 模仿新浪微博雷达搜索动画效果
- 教你用Python定时抓取微博评论,相当牛逼的技术