正点原子FreeRTOS学习笔记——临界段代码保护

目录

一、基本原理

临界区

Cortex-M 硬件详情

使用 RTOS 内核时的相关性

二、函数

1、任务级进出临界段

2、中断级进出临界段


一、基本原理

临界区(临界段代码):必须完整运行,不能被打断的代码段。

临界区本质:屏蔽中断。

适用场合:

                1、外设 需严格按照时序初始化的外设,如IIC、SPI等等

                2、系统自身需求

                3、用户需求

打断当前程序的运行:中断与任务调度

以下转载自官网:

原文链接:https://www.freertos.org/zh-cn-cmn-s/RTOS-Cortex-M3-M4.html

临界区

Cortex-M 硬件详情

RTOS 内核使用 ARM Cortex-M 核心的 BASEPRI 寄存器 来实现临界区。 因此,RTOS 内核能够仅屏蔽一部分中断, 从而提供灵活的中断嵌套模型。

BASEPRI 是一个位掩码。 为 BASEPRI 设置为一个值后,它可以屏蔽所有逻辑优先级等于 或低于该值的中断。 因此,无法使用 BASEPRI 来 屏蔽优先级为 0 的中断。

题外话: 可以从中断中安全调用的 FreeRTOS API 函数 使用 BASEPRI 来实现中断安全临界区。 进入临界区时, BASEPRI 的值设置为 configMAX_SYSCALL_interrupt_PRIORITY, 退出临界区时,设置为 0。 我们收到许多故障报告 认为 BASEPRI 应在退出临界区时返回到原始值,而不仅仅是设置为 0, 但是 Cortex-M NVIC 绝不会接受一个优先级低于当前正在执行的中断的优先级的中断, 不管 BASEPRI 设置为多少。 一个总是 将 BASEPRI 设置为 0 的实现执行代码的速度比一个 存储然后恢复 BASEPRI 值的实现更快 (编译器的优化器打开的情况下)。

使用 RTOS 内核时的相关性

RTOS 内核通过将 configMAX_SYSCALL_INTRUPT_PRIORITY 的值 写入 ARM Cortex-M BASEPRI 寄存器来创建临界区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值