当前位置: 首页 > news >正文

笔记三 FreeRTOS中断

笔记三 FreeRTOS中断


一、中断介绍

1、什么是中断

让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断。

在这里插入图片描述

2、中断执行机制

  1. 中断请求 :外设产生中断请求(如:GPIO外部中断、定时器中断…)。
  2. 响应中断 :CPU停止执行当前程序,转而执行中断处理程序(ISR)。
  3. 退出中断 :执行完毕,返回被打断的程序处,继续往下执行。

二、中断优先级分组设置

1、中断优先级分组介绍

ARM Cortex-M 使用了8位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器。但STM32只用了中断优先级配置寄存器的高4位[7:4],所以STM32提供了最大16级(0~15)的中断优先等级。

在这里插入图片描述

2、什么是抢占优先级,什么是子优先级

STM32的中断优先级可以分为抢占优先级和子优先级。

  • 抢占优先级 :抢占优先级的中断可以打断正在执行但抢占优先级低的中断。
  • 子优先级 :当同时发生具有相同抢占优先级的两个中断时,子优先级数小的优先执行。

注意 :中断优先级(抢占优先级和子优先级)数值越小,优先级越高。

3、中断优先级配置方式

在这里插入图片描述
一共有5种配置方式,对应着中断优先级分组的5个组。

注意:FreeRTOS中为了方便管理,采用第4号(NVIC_PriorityGroup_4)分配方式。

4、FreeRTOS中对中断优先级的管理

  1. 低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断才允许调用FreeRTOS的API函数。
  2. 建议将所有优先级位指定为抢占优先级位,方便FreeRTOS管理。
  3. 中断优先级数值越小越优先,任务优先级数值越大越优先。

在这里插入图片描述


三、中断相关寄存器

1、系统中断优先级配置寄存器

三个系统中断优先级配置寄存器,分别为 SHPR1、 SHPR2、 SHPR3 。

  • SHPR1寄存器地址:0xE000ED18~0xE000ED1B
  • SHPR2寄存器地址:0xE000ED1C~0xE000ED1F
  • SHPR3寄存器地址:0xE000ED20~0xE000ED23

在这里插入图片描述

注意:FreeRTOS主要是使用SHPR3寄存器对PendSVSystick中断优先级进行设置(设置为最低优先级)。

2、FreeRTOS如何配置PendSV和Systick中断优先级

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:在FreeRTOS系统中PendSV和SysTick设置最低优先级。

3、为什么将PendSV和SysTick设置最低优先级

保证系统任务切换不会阻塞系统其他中断的响应。

4、中断屏蔽寄存器

三个中断屏蔽寄存器,分别为PRIMASK、FAULTMASK和BASEPRI 。

在这里插入图片描述

FreeRTOS所使用的中断管理就是利用的BASEPRI这个寄存器。

5、BASEPRI中断屏蔽寄存器

BASEPRI:屏蔽优先级低于某一个阈值的中断,当设置为0时,则不关闭任何中断。

比如: BASEPRI设置为0x50,代表中断优先级在5~15内的均被屏蔽,0~4的中断优先级正常执行

在这里插入图片描述

6、FreeRTOS的关中断程序

在这里插入图片描述

7、FreeRTOS的开中断程序

在这里插入图片描述

8、中断服务函数调用FreeRTOS的API函数需注意

  1. 中断服务函数的优先级需在FreeRTOS所管理的范围内。
  2. 在中断服务函数里边需调用FreeRTOS的API函数,必须使用带“FromISR”后缀的函数。

FreeRTOS临界段代码保护


一、临界段代码保护简介

1、什么是临界段

临界段代码也叫临界区,是指那些必须完整运行,不能被打断的代码片段。运行时临界段代码时需要关闭中断,当处理完临界段代码以后再打开中断。

2、适用什么场合

  • 外设 :需要严格按照时序初始化的外设,如IIC、SPI等。
  • 系统 :系统自身需求,如任务切换过程等。
  • 用户 :用户需求,如我们写的任务创建任务。

3、什么可以打断当前程序的运行

中断、任务调度。


二、临界段代码保护函数介绍

1、临界段代码保护函数

在这里插入图片描述

任务级临界区调用格式示例:

在这里插入图片描述

中断级临界区调用格式示例:

在这里插入图片描述

2、临界段代码保护函数使用特点

  1. 成对使用。
  2. 支持嵌套。
  3. 尽量保持临界段耗时短。

http://www.xdnf.cn/news/1469755.html

相关文章:

  • 虚拟机详细图文教程系列15、Linux虚拟机Centos8系统部署禅道开源项目
  • 如何修改drawio中的线条样式(将实线变为虚线)
  • unsloth笔记:基本介绍
  • SAP官方授权供应商名单2025
  • 神经网络|(十九)概率论基础知识-伽马函数·下
  • JavaSE丨IO流全解:从基础概念到序列化实战
  • 树莓派传感器扩展板资料
  • VMWare上搭建大数据集群
  • 8. Mono与IL2Cpp简介
  • mysql中null值对in子查询的影响
  • B.50.10.03-Nginx核心原理与电商应用
  • 基于STM32单片机FM调频TEA5767功放收音机液晶显示设计
  • Zynq-7000 上 RT-Thread 的 MMU 与 SMP 优势分析
  • 七彩喜智慧养老:科技向善,让“养老”变“享老”的智慧之选
  • 23种设计模式——桥接模式 (Bridge Pattern)详解
  • 极大似然估计与概率图模型:统计建模的黄金组合
  • 洛谷 P1099 [NOIP 2007 提高组] 树网的核-普及+/提高
  • ShareX神操作:多区域截图+特效功能!
  • linux ubi文件系统
  • Linux 文件系统及磁盘相关知识总结
  • Webpack 有哪些特性?构建速度?如何优化?
  • 前端开发vscode插件 - live server
  • 【SuperSonic】:PluginParser 插件解析器
  • 雅菲奥朗SRE知识墙分享(六):『混沌工程的定义与实践』
  • 十二、软件系统分析与设计
  • Linux:进程信号理解
  • Day21_【机器学习—决策树(2)—ID3树 、C4.5树、CART树】
  • stm32——NVIC,EXIT
  • RHEL7.9、RHEL9.3——源码安装MySQL
  • 人工智能领域、图欧科技、IMYAI智能助手2025年8月更新月报