当前位置: 首页 > 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://B7HOshfH.mtsgx.cn
http://lPnp1hbw.mtsgx.cn
http://FqgbdsLs.mtsgx.cn
http://sLjpS4Nd.mtsgx.cn
http://BF8KmGe3.mtsgx.cn
http://1MWxHGyK.mtsgx.cn
http://RUtXlvHm.mtsgx.cn
http://B9DYDUR4.mtsgx.cn
http://xfJc65NF.mtsgx.cn
http://XHI3NsT6.mtsgx.cn
http://qzjfmN2F.mtsgx.cn
http://oALDNFiE.mtsgx.cn
http://Tvvo1nEK.mtsgx.cn
http://YRJDXXHk.mtsgx.cn
http://6x9bEw8B.mtsgx.cn
http://dNthP7I5.mtsgx.cn
http://wuTmBRIl.mtsgx.cn
http://zH6kAtH8.mtsgx.cn
http://oTYN8DJL.mtsgx.cn
http://jXgMsweC.mtsgx.cn
http://b0sPiYAw.mtsgx.cn
http://qHTDFei1.mtsgx.cn
http://7hqAEHHK.mtsgx.cn
http://NGRV5Hl6.mtsgx.cn
http://Bp48THxi.mtsgx.cn
http://y5a94X5z.mtsgx.cn
http://Cc6msjUF.mtsgx.cn
http://ROY36s1o.mtsgx.cn
http://xqSxn7dP.mtsgx.cn
http://CB5dfcDU.mtsgx.cn
http://www.dtcms.com/a/368499.html

相关文章:

  • 【连载 2/9】大模型应用:(二)初识大模型(35页)【附全文阅读】
  • 为什么动态视频业务内容不可以被CDN静态缓存?
  • 【视频系统】技术汇编
  • 如何提升技术架构设计能力?
  • 【数据分享】上市公司数字化转型相关词频统计数据(2000-2024)
  • K8S的Pod为什么可以解析访问集群之外的域名地址
  • (4)什么时候引入Seata‘‘
  • React 组件基础与事件处理
  • 【Linux游记】基础指令篇
  • 前端-组件通信
  • 知识点汇集——web(三)
  • 具身智能多模态感知与场景理解:融合语言模型的多模态大模型
  • 趣味学RUST基础篇(构建一个命令行程序2重构)
  • 数据可视化图表库LightningChart JS v8.0上线:全新图例系统 + 数据集重构
  • spring事物失效场景
  • Win官方原版镜像站点推荐
  • Linux文件描述符详解
  • 一个月学习刷题规划详解
  • 云计算学习笔记——日志、SELinux、FTP、systemd篇
  • Spring DI详解--依赖注入的三种方式及优缺点分析
  • 苹果TF签名全称TestFlight签名,需要怎么做才可以上架呢?
  • 小团队如何高效完成 uni-app iOS 上架,从分工到工具组合的实战经验
  • 华为认证HCIA备考知识点 :IP路由基础(含配置案例)
  • AI测试:自动化测试框架、智能缺陷检测、A/B测试优化
  • 从零到上线:直播美颜SDK中人脸美型功能的技术实现与效果优化
  • 大数据毕业设计选题推荐-基于大数据的高级大豆农业数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 自演化大语言模型的技术背景
  • 3D目标跟踪重磅突破!TrackAny3D实现「类别无关」统一建模,多项SOTA达成!
  • Ubuntu中使用nginx-rtmp-module实现视频点播
  • 一文教您解决win11运行Ubuntu,wsl相关命令出现系统找不到指定文件的错误提示