FreeRtos中段管理-----参考正点原子

什麽是中断?
让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断
中断执行机制,可简单概括为三步:
1,中断请求:外设产生中断请求(GPIO外部中断、定时器中断等);即中断标志置位。
2,响应中断:CPU停止执行当前程序,转而去执行中断处理程序(ISR);即中断处理。
3,退出中断:执行完毕,返回被打断的程序处,继续往下执行。即清除中断标志位。
中断优先级分组设置(以ARM为例)
ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器。但STM32,只用了中断优先级配置寄存器的高4位 [7 : 4],所以STM32提供了最大16级的中断优先等级。
在这里插入图片描述
STM32 的中断优先级可以分为抢占优先级和子优先级:
抢占优先级: 抢占优先级高的中断可以打断正在执行但抢占优先级低的中断;
**子优先级:*当同时发生具有相同抢占优先级的两个中断时,子优先级数值小的优先执行。(有人也称为响应优先级,就是当两个中断抢占优先级数值相同时,对响应优先级进行比较,响应优先级数值越小,优先响应)
注意:中断优先级数值越小越优先。任务优先级数值越大越优先
一共有 5 种分配方式,对应着中断优先级分组的 5 个组
在这里插入图片描述
例如:通过调用函数HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4)即可完成设置
使用过STM的应该都知道这么配置。
特点:
1、低于configMAX_SYSCALL_INTERRUPT_PRIORITY优先级的中断里才允许调用FreeRTOS 的API函数
2、建议将所有优先级位指定为抢占优先级位,方便FreeRTOS管理(例如:(调用函数HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4)

3、中断优先级数值越小越优先,任务优先级数值越大越优先
FreeRTOS如何配置PendSV和Systick中断优先级?
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
所以:PendSV和SysTick设置最低优先级
设置最低:保证系统任务切换不会阻塞系统其他中断的响应
中断相关寄存器
三个中断屏蔽寄存器,分别为 PRIMASK、 FAULTMASK 和BASEPRI
在这里插入图片描述
FreeRTOS所使用的中断管理就是利用的BASEPRI这个寄存器
BASEPRI:屏蔽优先级低于某一个阈值的中断

BASEPRI:屏蔽优先级低于某一个阈值的中断,当设置为0时,则不关闭任何中断
例如:#define portDISABLE_INTERRUPTS() vPortRaiseBASEPRI()
static portFORCE_INLINE void vPortRaiseBASEPRI( void )
{
uint32_t ulNewBASEPRI = configMAX_SYSCALL_INTERRUPT_PRIORITY;
__asm
{
msr basepri, ulNewBASEPRI
dsb
isb
}
}
#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) )
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 /
FreeRTOS可管理的最高中断优先级 */
中断优先级在5 ~ 15的全部被关闭
在中断服务函数中调度FreeRTOS的API函数需注意:
1、中断服务函数的优先级需在FreeRTOS所管理的范围内
2、在中断服务函数里边需调用FreeRTOS的API函数,必须使用带“FromISR”后缀的函数
BASEPRI:屏蔽优先级低于某一个阈值的中断,当设置为0时,则不关闭任何中断
开中断程序示例:
#define portENABLE_INTERRUPTS() vPortSetBASEPRI( 0 )
static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
{
__asm
{
msr basepri, ulBASEPRI
}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的社区养老服务系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

常用负载均衡详解

一、介绍 在互联网场景下&#xff0c;负载均衡&#xff08;Load Balance&#xff09;是分布式系统架构设计中必须考虑的一个环节&#xff0c;它通常是指将负载流量&#xff08;工作任务、访问请求&#xff09;平衡、分摊到多个操作单元&#xff08;服务器、组件&#xff09;上去…

【spring】@Conditional注解学习

Conditional介绍 Conditional注解用于按照设定的条件进行判断&#xff0c;从而决定是否将某个bean注册到Spring容器中。 Conditional注解是在Spring 4.0版本中引入的&#xff0c;它提供了一种更加灵活的方式来控制bean的创建和注册。在此之前&#xff0c;开发者通常使用Profi…

[Redis]——Redis持久化的两种方式RDB、AOF

目录 RDB快照模式 概念&#xff1a; 触发时机&#xff1a; 异步做快照 AOF追加模式 概念&#xff1a; 触发时机&#xff1a; bgrewriteaof命令&#xff1a; 比较两种模式&#xff1a; RDB快照模式 概念&#xff1a; RDB模式就是保存当前Redis的状态到本地磁盘文件&am…

综合应用题——线性表的链式表示(每日更新中...)

一、练习题 01题 在带头结点的单链表L中&#xff0c;删除所有值为x的结点&#xff0c;并释放其空间&#xff0c;假设值为x的结点不唯一&#xff0c;试编写算法以实现上述操作。 【解法1】用p从头至尾扫描单链表&#xff0c;pre指向*p结点的前驱。若p所指结点的值为x&#xf…

【堆、位运算、数学】算法例题

目录 十九、堆 121. 数组中的第K个最大元素 ② 122. IPO ③ 123. 查找和最小的K对数字 ② 124. 数据流的中位数 ③ 二十、位运算 125. 二进制求和 ① 126. 颠倒二进制位 ① 127. 位1的个数 ① 128. 只出现一次的数字 ① 129. 只出现一次的数字 II ② 130. 数字范围…

MATLAB:函数与数值积分

一、数学函数图像的绘制 clc,clear fh (x)2*exp(-x).*sin(x); Xrange [0,8]; gx (x)3*exp(-x)*0.8.*sin(x); fplot(fh,Xrange,r-*,LineWidth,1.5) hold on grid on fplot(gx,Xrange,b-o,LineWidth,1.5) axis([-0.5,8.5,-0.1,0.85]) legend(fh (x)2*exp(-x).*sin(x),gx (x…

【笔记】用三角函数拟合数据(最小二乘法)

0.Matlab自带函数拟合 用三角函数拟合数据简单方便,matlab自带的fittype函数即可完成拟合任务,但是fittype函数仅限于matlab,为了搞懂fittype函数的内含,自己写了一套函数用于拟合。 如下图所示,现有一不规则散点,命令用三角函数拟合,拟合的目标频率w0为0.01m^-1 拟合…

模型部署——RKNN模型量化精度分析及混合量化提高精度

模型部署——RKNN模型量化精度分析及混合量化提高精度&#xff08;附代码&#xff09;-CSDN博客 3.1 量化精度分析流程 计算不同情况下&#xff0c;同一层网络输入值的余弦距离&#xff0c;来近似的查看每一层精度损失的情况。具体量化精度分析的流程如下&#xff1a; 3.2 量…

闪存盘上被删除的文件能被回收站恢复吗?

随着数字设备的普及&#xff0c;闪存盘作为一种便携式的存储设备&#xff0c;已经深入到了我们的日常生活和工作中。然而&#xff0c;在使用闪存盘的过程中&#xff0c;我们可能会不小心删除一些重要的文件。这时&#xff0c;很多人会寄希望于回收站来恢复这些文件。但是&#…

Flutter开发入门——路由

什么是路由&#xff1f; 移动端应用开发中&#xff0c;路由技术是一个非常重要的组成部分。路由技术负责管理应用中各个页面之间的跳转、导航以及参数传递等关键功能。在移动端应用中&#xff0c;一个高效、易于维护的路由系统对于提高开发效率和用户体验具有重要意义。 Flut…

基于Java中的SSM框架实现医院院内物资管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现医院院内物资管理系统演示 摘要 在当今的中国改革开放经济体制下&#xff0c;中国经济正以快速稳健的步伐前行。并且随着经济的发展&#xff0c;各领域的信息化管理也得到了充足的发展&#xff0c;而且愈发普及。现如今&#xff0c;几乎所有的行业中都…

机器学习_自我总结

文章目录 简介优化算法的方法诊断偏差和方差 简介 我只是一个小白,很多东西写不好,也不是很懂只是记一下笔记对自己的映像更深,也希望有人能够指导我学习(谢谢!) 优化算法的方法 (1)修改学习速率,还有各种(可变)参数1.尝试减少特征的数量2.尝试获得更多的特征3.尝试增加多项…

elment-ui el-tabs组件 每次点击后 created方法都会执行2次

先看错误的 日志打印: 错误的代码如下: 正确的日志打印: 正确的代码如下: 前言: 在element-ui的tabs组件中,我们发现每次切换页面,所有的子组件都会重新渲染一次。当子页面需要发送数据请求并且子页面过多时,这样会过多的占用网络资源。这里我们可以使用 v-if 来进行…

科技助力高质量发展:新质生产力的崛起与企业数字化转型

引言 随着科技的飞速发展&#xff0c;我们正逐渐步入数字化智能时代&#xff0c;这个时代不仅为企业带来了无限的机遇&#xff0c;也让其面对前所未有的挑战。在这个快速变革的时代&#xff0c;企业必须不断调整自己的经营策略&#xff0c;适应数字化转型的浪潮&#xff0c;以…

SQL-Labs靶场“32-33”关通关教程

君衍. 一、32关 GET单引号闭合宽字节注入1、源码分析2、宽字节注入原理3、联合查询注入4、updatexml报错注入5、floor报错注入 二、33关 GET单引号addslashes逃逸注入1、源码分析2、联合查询注入3、updatexml报错注入4、floor报错注入 SQL-Labs靶场通关教程&#xff1a; SQL注入…

【Linux】多线程 --- 同步+POSIX信号量+基于环形队列的生产者消费者模型

线程同步 1. 通过条件变量抛出线程同步概念 在上一篇线程互斥博客就说过&#xff0c;在抢票逻辑中&#xff0c;刚释放完锁的线程由于竞争能力比较强&#xff0c;导致其他线程无法申请到锁&#xff0c;那么长时间其他线程都无法申请到锁&#xff0c;只能阻塞等待着&#xff0c…

福克斯2010 1.8L 手动档

老车了记录点东西 好看也便宜 福克斯维修保养费用调查_保养维护_车系文章_空港平行进口汽车交易服务中心 https://tjautoland.net/article-40.html 福克斯自从上市后&#xff0c;凭借其时尚动感的外形、良好的操控性和极佳的驾乘舒适度&#xff0c;在国内紧凑型市场上持续热…

HJDZ-E800静态中间继电器 DC24V 35mm卡导轨安装 JOSEF约瑟

HJDZ静态中间继电器 系列型号&#xff1a; HJDZ-A200静态中间继电器&#xff1b;HJDZ-A110静态中间继电器&#xff1b; HJDZ-A002静态中间继电器&#xff1b;HJDZ-A004静态中间继电器&#xff1b; HJDZ-E112静态中间继电器&#xff1b;HJDZ-E112L静态中间继电器&#xff1b; HJ…

一步将查询功能添加到公众号菜单和文章

易查分如何将查询功能添加到公众号菜单和文章&#xff0c;实现菜单栏、文章、自动回复均可进行查询。本文给大家详细讲解。 &#x1f50e;接入方式&#xff1a; ✅1.公众号菜单栏接入查询网址 ✅2.公众号菜单栏接入查询小程序 ✅3.公众号菜单栏点击发送查询二维码 ✅4.公众…
最新文章