【STM32】临界区进入退出宏 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()
宏函数展开为:
#define OS_CRITICAL_METHOD 3 #if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}
#endif
OS_CPU_SR_Save() 和 OS_CPU_SR_Restore(cpu_sr) 在os_cpu_a.asm 中,为移植函数:
OS_CPU_SR_Save //PRIMASK缺省值0 中断屏蔽寄存器 =1 关闭所有可屏蔽异常 只剩下NMI和硬fault可以响应
MRS R0, PRIMASK //MRS指令用于将状态寄存器的内容传送到通用寄存器中 读取PRIMASK到R0中,R0为返回值 CPSID I //PRIMASK=1,关中断(NMI和硬fault可以响应
BX LR //返回 BX带状态切换的条状指令 OS_CPU_SR_Restore //读取R0到PRIMASK中,R0为参数 MSR PRIMASK, R0
BX LR
说明:
中断屏蔽寄存器
PRIMASK
这个寄存器只有一个位,置1后,将关闭所有可屏蔽中断的异常,只剩NMI和硬fault,默认值为0;
进入临界区,将关中断前的中断屏蔽状态保存到局部变量中。
退出临界区,将之前保存的中断屏蔽状态恢复到PRIMASK中断屏蔽寄存器中。
【STM32】临界区进入退出宏 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()的更多相关文章
- 怎样把UCos-ii_在STM32上的移植
下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32. 首先从 st 公司的站点下载最新的 stm32 标准外设库,写本文时最新的版本号是 V ...
- stm32非操作系统开发和带uCos的开发的区别,及一些解析
从文件角度来看core_cm4.h和stm32f4xx.h分别从内核寄存器和外设寄存器来定义其地址和结构体,是用c语言访问硬件必须的文件,所以这两个文件不论是否带操作系统,都是必须包含进工程的. re ...
- uCos-II移值(一)
os_cpu.h文件 该文件主要是完成操作系统使用的内部数据类型.常数以及宏的定义,这些都是与处理器平台密切相关的: 第一部分 以下部分定义了系统内部常用的数据类型,为了增加系统的可移植性,系统内核只 ...
- 单片机main函数退出后发生什么——以stm32为例
STM32:main函数退出后发生什么? 我们都在说单片机要运行在无限循环里,不能退出,可退出之后会发生什么? 讨论STM32启动过程的文章数不胜数,可main函数结束之后会发生什么却少有讨论. 几日 ...
- ucos中的三种临界区管理机制
熟悉ucos,或者读过Jean.J.Labrosse写过的ucos书籍的人,一定会知道ucos中著名的临界区管理宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(). 同样 ...
- 一步步写STM32 OS【四】OS基本框架
一.上篇回顾 上一篇文章中,我们完成了两个任务使用PendSV实现了互相切换的功能,下面我们接着其思路往下做.这次我们完成OS基本框架,即实现一个非抢占式(已经调度的进程执行完成,然后根据优先级调度等 ...
- 一步步学习操作系统(1)——参照ucos,在STM32上实现一个简单的多任务(“啰里啰嗦版”)
该篇为“啰里啰嗦版”,另有相应的“精简版”供参考 “不到长城非好汉:不做OS,枉为程序员” OS之于程序员,如同梵蒂冈之于天主教徒,那永远都是块神圣的领土.若今生不能亲历之,实乃憾事! 但是,圣域不是 ...
- 宏汇编软件MASM51的使用
单片机开发可以用手工汇编和机器汇编两种方法.采用手工汇编就是先编写出汇编程序,然后对照单片机汇编表手工将汇编程序翻译成机器码,最后将机器码一个一个地送入开发仿真器的RAM中去进行调试. 由于采用手工汇 ...
- STM32关于优先级设定的理解 NVIC_SetPriority()
Systick模块初始化配置函数(Systick_config)中设定模块中断优先级的函数为: NVIC_SetPriority((SysTick_IRQn, (1<<__NVIC_PRI ...
随机推荐
- java-同一用户顶替操作(session过期或无效)
同一账号后者登录前者被强制退出:(可以通过监听器或过滤器进行监测session是否无效) 首先根据输入的用户名和密码做验证,通过验证查询用户信息.在用户信息不为空的前提下,比较静态变量中的sessio ...
- DB SQL Monitor 会话状态及等待事件监控工具
DB SQL Monitor v1.7.6 Designed by Wang Zhaoguan 工具说明 --------------------------------------- ...
- BootStrap小知识随笔
1.让label和input在一行显示 添加class "form-inline"就可以了.如 <table class="table table-bordered ...
- WebService客户端(以命令方式创建)
以命令的方式生成WebService客户端: 创建一个Project项目,客户端项目名称WS_Client,在cmd界面进入JDK的bin目录,输入以下命令 完整格式: C:\Program File ...
- __unsafe_unretained的含义
OC的变量限定词的官方解释: __strong is the default. An object remains “alive” as long as there is a strong point ...
- @Transactional的正确打开方式
经常用到事务管理,可还是不小心会写错,导致事务没有生效,这里总结下. 正确的代码例子如下所示,框架是使用spring+mybatis的,有些配置的就不贴出来了. TestController2: pa ...
- Kong(v1.0.2)认证
介绍 上游服务(api或微服务)的流量通常由各种Kong的authentication plugins的应用程序和配置控制.由于Kong的服务实体表示您自己的上游服务的一对一映射,所以最简单的场景是在 ...
- 红米手机5 Plus完美刷成开发版获取root权限的教程
小米的设备不同手机型号通常情况小米官方都提供两个不同系统,可分为稳定版和开发版,稳定版没有提供ROOT超级权限管理,开发版中就提供了ROOT超级权限,较多时候我们需要使用的一些功能强大的工具,都需要在 ...
- Ajax异步请求阻塞情况的解决办法(asp.net MVC Session锁的问题)
讨论今天这个问题之前,我们先来看下浏览器公布的资源并发数限制个数,如下图 不难看出,目前主流浏览器支持都是最多6个并发 需要注意的是,浏览器的并发请求数目限制是针对同一域名的 意即,同一时间针对同一域 ...
- jquery---筛选总结
jQuery中筛选这块内容较多,就简单的说明一下说用方法和能有什么样效果,就不弄案例来说明了: 第一类:过滤 1.eq(index|-index) $("p").eq(1).css ...