FreeRTOS学习 -- 中断配置

news2024/11/25 19:40:43

一、什么是中断

中断时微控制器一个很常见的特性,中断是由硬件产生,当中断产生以后CPU就会中断当前的流程而去处理中断服务,Cortex-M内核的MCU提供了一个用于中断管理的嵌套向量中断控制器(NVIC)。

二、中断优先级分组定义

当多个中断来临的时候处理器应该响应哪一个中断是由中断的优先级来决定的,高优先级的中断(优先级编号小)肯定是首先得到响应的,而且高优先的中断可以抢占低优先级的中断,这个就是中断嵌套。
Cortex-M处理器的有些中断是具有固定的优先级的,比如复位、NMI、HardFault,这些中断的优先级都是负数,优先级也是最高的。
STM32,只用了中断优先级配置寄存器的高4位 [7 : 4],所以STM32提供了最大16级的中断优先等级,MSB 对齐。
在这里插入图片描述

STM32优先级分组:
在这里插入图片描述
ST 官方默认的是组 4,4 位优先级就都全是抢占优先级了,没有亚优先级,那么就有 0~15 共 16 个优先级。
在这里插入图片描述

三、用于中断屏蔽的特殊寄存器

PRIMASK 寄存器

PRIMASK 用于禁止除 NMI 和 HardFalut 外的所有异常和中断。
只有 1 个位的寄存器,当它置 1 时,就关掉所有可屏蔽的异常,只剩NMI和HardFalut 可以响应。当它置 0 时,表示没有关中断。

FAULTMASK 寄存器

PRIMASK 用于禁止除 NMI 外的所有异常和中断。它可以连 HardFault 都屏蔽掉。
只有 1 个位的寄存器,当它置 1 时,就关掉所有可屏蔽的异常,只剩NMI可以响应。当它置 0 时,表示没有关中断。

BASEPRI 寄存器

这个寄存器最多有 9 位(由表达优先级的位数决定)。它定义了被屏蔽优先级的阈值。当它被设成某个值后,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低)。但若被设置为 0,则不关闭任何中断。默认值是 0.

四、中断配置宏

在这里插入图片描述

1、configPRIO_BITS

此宏用来设置 MCU 使用几位优先级,STM32 使用的是 4 位,因此此宏为 4

2、configKERNEL_INTERRUPT_PRIORITY

此宏是用来设置最低优先级。STM32 优先级使用了 4 位,而且 STM32 配置的使用组 4,也就是 4 位都是抢占优先级。优先级数就是 16 个,最低优先级那就是 15。所以此宏就是 15

3、configKERNEL_INTERRUPT_PRIORITY

此宏用来设置内核中断优先级。

4、configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY

此宏用来设置 FreeRTOS 系统可管理的最大优先级。这里设置为了 5。也就是高于 5 的优先级(优先级数小于 5)不归 FreeRTOS 管理!

5、configMAX_SYSCALL_INTERRUPT_PRIORITY

此宏是 configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 左移 4 位而来的,原因和宏 configKERNEL_INTERRUPT_PRIORITY 一样。此宏设置好以后,低于此优先级的中断可以安全的调用 FreeRTOS 的 API 函数,高于此优先级的中断 FreeRTOS 是不能禁止的,中断服务函数也不能调用 FreeRTOS 的 API 函数!

五、开关中断

FreeRTOS 开关中断函数为 portENABLE_INTERRUPTS ()和 portDISABLE_INTERRUPTS()
在这里插入图片描述
可以看出开关中断实际上是通过函数 vPortSetBASEPRI(0)和 vPortRaiseBASEPRI()来实现的。
在这里插入图片描述

六、临界段代码

临界段代码也叫做临界区,是指那些必须完整运行,不能被打断的代码段,比如有的外设的初始化需要严格的时序,初始化过程中不能被打断。FreeRTOS 在进入临界段代码的时候需要关闭中断,当处理完临界段代码以后再打开中断。FreeRTOS 系统本身就有很多的临界段代码,这些代码都加了临界段代码保护,我们在写自己的用户程序的时候有些地方也需要添加临界段代码保护。

FreeRTOS 与临界段代码保护有关的函数有 4 个:

  • taskENTER_CRITICAL()
  • taskEXIT_CRITICAL()
  • taskENTER_CRITICAL_FROM_ISR()
  • taskEXIT_CRITICAL_FROM_ISR()
    在这里插入图片描述

这四个函数其实是宏定义,在 task.h 文件中有定义。这四个函数的区别是前两个是任务级的临界段代码保护,后两个是中断级的临界段代码保护。

taskENTER_CRITICAL()和 taskEXIT_CRITICAL()是任务级的临界代码保护,一个是进入临界段,一个是退出临界段,这两个函数是成对使用的。

任务级别使用方法如下:
在这里插入图片描述
函数 taskENTER_CRITICAL_FROM_ISR()和 taskEXIT_CRITICAL_FROM_ISR()中断级别临界段代码保护,是用在中断服务程序中的,而且这个中断的优先级一定要低于 configMAX_SYSCALL_INTERRUPT_PRIORITY!这两个函数是成对使用的。

中断级临界代码保护使用方法如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1607129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

波士顿动力抛弃液压机器人Atlas,推出全新电动化机器人,动作超灵活

本周,机器人科技巨头波士顿动力宣布液压Atlas退役,并推出了下一代产品——专为实际应用而设计的全电动Atlas机器人,这也意味着人形机器人迈出了商业化的第一步。 Atlas——人形机器人鼻祖 Atlas(阿特拉斯)这个名字最…

为什么有的云渲染注册条件哪么多?有没有注册条件少的?

随着云渲染技术的普及,越来越多的设计师、艺术家和企业开始依赖这一强大的工具来加速创作过程。但是在我们注册账号的时候你会发现不同平台间的注册条件不同,一些平台在用户注册过程中设置了一系列繁琐的验证环节,让我们填那种无意义的数字或…

java体育馆使用预约平台的设计与实现(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的体育馆使用预约平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 体育馆使用预约平台的…

ruoyi-nbcio-plus基于vue3的多租户机制

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

饮料市场迎来“营养革命”?2024年饮料行业销售数据分析已出炉

随着健康意识的日益增强,消费者对于饮料的需求已经不再是单纯追求口感和美味,而是更加关注产品的营养价值和健康属性。在这种背景下,上海市卫生健康委近期启动了“首批营养健康指导试点项目”,其中饮料“营养选择”分级标识试点的…

DFS专题:力扣岛屿问题(持续更新)

DFS专题:力扣岛屿问题 开篇 每次做到DFS相关的题目都是直接跳过。蓝桥杯过后痛定思痛,好好学习一下DFS和BFS。先从DFS开始吧。 参考题解:nettee:岛屿类问题的通用解法、DFS 遍历框架 题目链接: 200.岛屿数量    …

机器学习波士顿房价

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1deECYRPQFx8h28BvoZcbWw?pwdft5a 提取码:ft5a --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

FreeRTOS之动态创建任务与删除任务

1.本文是利用FreeRTOS来动态创建任务和删除任务。主要是使用FreeRTOS的两个API函数:xTaskCreate()和vTaskDelete()。 任务1和任务2是让LED0、LED1闪烁。任务3是当按键按下时删除任务1。 使用动态创建任务时,需要动态的堆中申请任务所需的内存空间&…

Eagle for Mac v1.9.13注册版:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具,旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.13注册版下载 Eagle支持多种图片格式,包括JPG、PNG、GIF、SVG、PSD、AI等,无论是矢量图还是位图,都能以清…

软考 系统架构设计师系列知识点之大数据设计理论与实践(11)

接前一篇文章:软考 系统架构设计师系列知识点之大数据设计理论与实践(10) 所属章节: 第19章. 大数据架构设计理论与实践 第3节 Lambda架构 19.3.6 Lambda与其它架构模式对比 Lambda架构的诞生离不开很多现有设计思想和架构的铺垫…

ctfhub-ssrf(2)

1.URL Bypass 题目提示:请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧 打开环境发现URL中必须包含http://notfound.ctfhub.com,先按照之前的经验查看127.0.0.1/flag.php,发现没什么反应,按照题…

excel表格如何筛选重复的内容并单独显示

在处理Excel数据时,遇到大量数据时需要筛选数据中的重复值并单独显示出来,那么此时该如何处理呢?事实上在Excel表格中筛选出重复的内容并单独显示的方法有很多种,以下是其中常用的3种: 方法一:使用条件格式…

每日OJ题_多源BFS①_力扣542. 01 矩阵(多源BFS解决最短路原理)

目录 多源BFS解决最短路算法原理 力扣542. 01 矩阵 解析代码 多源BFS解决最短路算法原理 什么是单源最短路 / 多源最短路? 之前的BFS解决最短路都是解决的单源最短路。 画图来说,单源最短路问题即为: 而对于多源最短路问题: 如何解决此…

全球排名前十的搜索引擎,你猜百度排名在第几位?bing稳居二位!

通常情况下,营销人员在争夺其在线业务的流量时会非常关注Google,无论是通过他们的网站,博客文章还是其他形式的内容。考虑到谷歌无疑是最受欢迎的搜索引擎,拥有超过85%的搜索市场份额,这是有道理的。 但这种受欢迎程度…

STM32使用HAL库解码433遥控芯片EV1527

1、首先了解一下433遥控芯片ev1527的基本资料: 这是他编码的关键信息: 也就是说,一帧数据是:一个同步码20位内码4位按键码。 内码20位2^201048576个地址。 发送就是一帧数据接一帧数据不间断发送。 2、解码思路 从上面的帧结构…

node-mysql数据库的下载与安装

01 mysql数据库的安装 网址:mysql.com/downloads/ 打开之后往下翻 点击 MySQL Community (GPL) Downloads 》 点击 MySRL Community Server 再点击 No thanks,just stant my download. 02 安装mysql 03 安装完成之后检查mysql服务是否开启 services.msc 04 启动…

vue3【详解】 vue3 比 vue2 快的原因

使用 Proxy 实现响应式 vue3使用的 Proxy 在处理属性的读取和写入时,比vue2使用的defineProperty 有更好的性能(速度加倍的同时,内存还能减半!) 更新类型标记 Patch Flag 在编译模板时(将vue语法转换为js描…

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战(第2版)》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

如何判断两个IP地址是否在同一网段?

要判断两个IP地址是否在同一网段,首先需要对IP地址和子网掩码有深入的理解。IP地址是互联网协议地址,用于在IP通信中标识和定位每台设备的逻辑地址。而子网掩码则是一个32位的地址掩码,用于将IP地址划分为网络地址和主机地址两部分。通过比较…

9月BTE第8届广州国际生物技术大会暨展览会,全媒体聚焦下的高精尖行业盛会

政策春风助力,共迎大湾区生物医药行业50亿红利 今年3月“创新药”首次写入国务院政府工作报告之后,广州、珠海、北京多地政府纷纷同步出台了多项细化政策,广州最高支持额度高达50亿元,全链条为生物医药产业提供资金支持&#xff…