FreeRTOS中断管理 | FreeRTOS五

news2025/1/10 23:30:37

目录

说明:

一、中断基础

1.1、中断理解

1.2、中断执行步骤

1.3、中断寄存器选择位

1.4、中断优先级分类

二、中断优先级分组设置

2.1、分类

2.2、特点

三、中断有关寄存器

3.1、SHPR1寄存器

3.2、SHPR2寄存器

3.3、SHPR3寄存器

3.4、FreeRTOS中配置PendSV、Systick中断优先级步骤

四、FreeRTOS中断管理

4.1、中断有关函数

4.2、中断示例


说明:

1)以下内容多为概念了解与步骤分析

2)暂无个人示例代码,使用的是FreeRTOS的示例代码

3)若想移植代码测试的,请移步其它地方寻找,下文内容暂无个人示例代码供测试

关于其它:

1)操作系统:win 10

2)平台:keil 5 mdk

3)语言:c语言

4)板子:STM32系列移植FreeRTOS

一、中断基础

1.1、中断理解

        让CPU打断正常运行的程序,转而去处理的事件(程序),称为中断。

1.2、中断执行步骤

        1)中断请求,外设产生中断请求(GPIO外部中断、定时器中断);

        2)响应中断,CPU停止执行当前程序,转而去处理中断程序(ISR);

        3)退出中断,返回被中断打断的程序位置,继续执行程序。

1.3、中断寄存器选择位

        1)ARM Cortex-M使用了8位宽的寄存器来配置中断的优先等级,这个寄存器就是中断优先级配置寄存器;
        2)但STM32,只用了中断优先级配置寄存器的高4位[7 : 4](如下图1),所以STM32提供了最大16级的中断优先等级,用于表达优先级没有实现,读回零;

图1

1.4、中断优先级分类

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

2)抢占优先级:抢占优先级高的中断可以打断正在执行但抢占优先级低的中断

3)子优先级:当同时发生具有相同抢占优先级的两个中断时,子优先级数值小的优先执行

二、中断优先级分组设置

2.1、分类

可以分为5种,如下图2:

图2

2.2、特点

1)低于宏定义configMAX_ SYSCALL INTERRUPT_ PRIORITY优先级的中断里才允许调用FreeRTOS的API函数;

2)建议将所有优先级位指定为抢占优先级位,方便FreeRTOS管理
(调用函数HAL_ NVIC_ SetPriorityGrouping(NVIC PRIORITYGROUP_4)这是HAL库,标准库应该是:NVIC_ SetPriorityGrouping(NVIC PRIORITYGROUP_4)

3)中断优先级数值越小越优先,任务优先级数值越大越优先
 

三、中断有关寄存器

3.1、SHPR1寄存器

寄存器地址:0xE000ED18

3.2、SHPR2寄存器

寄存器地址:0xE000ED1C

3.3、SHPR3寄存器

寄存器地址:0xE000ED20

具体如下图3(来自Cortex M3权威指南(中文)第286页中):

 图3

3.4、FreeRTOS中配置PendSV、Systick中断优先级步骤

1)SHPR3寄存器地址获取,左移16位得到设置PendSV的寄存器地址

2)SHPR3寄存器地址获取,左移24位得到设置Systick的寄存器地址

3)通过一系列赋值,最后一步是进行汇编操作直接赋值给寄存器,进行配置,最后设置出PendSV与Systick的优先级为15,最低优先级

四、FreeRTOS中断管理

4.1、中断有关函数

关中断函数原型:portDISABLE_INTERRUPTS()

如果使用的移植支持 configMAX_SYSCALL_INTERRUPT_PRIORITY( 或 configMAX_API_CALL_INTERRUPT_PRIORITY)常量,那么 taskDISABLE_interrupts 将 禁用所有中断,或在 configMAX_SYSCALL_INTRUPT_PROJECT 设置之前屏蔽(禁用)中断。 检查 taskDISABLE_INTERRUPTS 在使用的移植中的实现。

如果使用的移植不支持 configMAX_SYSCALL_INTERRUPT_PRIORITY 常量, 那么 taskDISABLE_INTERRUPTS() 将对所有可屏蔽的中断进行全局禁用。

通常情况下不会直接调用该宏,而是使用 taskENTER_CRITICAL() 和 taskEXIT_CRITICAL() 来替代。

开中断函数原型:portENABLE_INTERRUPTS()

启用微控制器中断的宏。

通常情况下不会直接调用该宏,而是使用 taskENTER_CRITICAL() 和 taskEXIT_CRITICAL() 来替代。

4.2、中断示例

板子不在身边,无法测试,之后补上。以下是FreeRTOS官方示例:

/* A function that makes use of a critical section. */
void vDemoFunction( void )
{
    /* Enter the critical section.  In this example, this function is itself called
    from within a critical section, so entering this critical section will result
    in a nesting depth of 2. */
    taskENTER_CRITICAL();

    /* Perform the action that is being protected by the critical section here. */

    /* Exit the critical section.  In this example, this function is itself called
    from a critical section, so this call to taskEXIT_CRITICAL() will decrement the
    nesting count by one, but not result in interrupts becoming enabled. */
    taskEXIT_CRITICAL();
}

/* A task that calls vDemoFunction() from within a critical section. */
void vTask1( void * pvParameters )
{
    for( ;; )
    {
        /* Perform some functionality here. */

        /* Call taskENTER_CRITICAL() to create a critical section. */
        taskENTER_CRITICAL();


        /* Execute the code that requires the critical section here. */


        /* Calls to taskENTER_CRITICAL() can be nested so it is safe to call a
        function that includes its own calls to taskENTER_CRITICAL() and
        taskEXIT_CRITICAL(). */
        vDemoFunction();  

        /* The operation that required the critical section is complete so exit the
        critical section.  After this call to taskEXIT_CRITICAL(), the nesting depth
        will be zero, so interrupts will have been re-enabled. */
        taskEXIT_CRITICAL();
    }
}

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

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

相关文章

最优传输问题与Sinkhorn算法

目录引言例子:分甜点最优传输问题Sinkhorn算法Sinkhorn距离算法流程代码实验引言 最近看到一篇特征匹配相关的论文,思想是将特征匹配问题转化为最优传输问题求解,于是我去学习了一下最优传输问题。 本文主要是对博文 Notes on Optimal Trans…

4.6 QR分解二:Householder变换

1 Householder reflector Householder反射是这样子的(图片来自瑞典皇家理工学院):   图中u是长度为1的向量。x是任意向量,H是u的Householder reflector。可见无论x是什么向量,HxHxHx始终除于和u正交的平面上。H和u的关系是: HI…

【z-library平替】Clibrary中文图书馆,电子书大全

目录1、z-library和Clibrary简介2、Clibrary网址3、具体操作界面1、z-library和Clibrary简介 喜欢阅读的盆友多多少少可能都听过z-library,书籍库非常全,而且是免费的,但是在z-library国内下线后,就一直没有找到合适的平替书库。 …

【vue2】vuex超超超级详解!(核心五大配置项)

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:vuex基础认识、state、getters、mutations actions、modules使用 目录(文末原素材) 一、…

新年找工作?python带你批量采集招聘数据

前言 大家早好、午好、晚好吖 ❤ ~ 必备素材: stealth.min.js 谷歌浏览器谷歌驱动selenium3.141.0 不知道怎么弄嘚同学可以私我获取哦~ 开发环境: python 3.8 pycharm 专业版 操作步骤 selenium 模块: 操作浏览器 打开一个浏览器 打开一个网址 获取数据 保存数据 …

性能测试工具-nmon

nmon 文章目录nmon介绍下载Linux系统服务器在服务器上新建nmon文件夹将下载文件上传到服务器新建的文件夹内修改文件名启动nmon启动nmon命令行使用nomn_analyser对监控结果进行分析图表分析nmon 主要用来做性能测试时对服务器的监控 捕捉各类系统资源的使用情况,并…

Maven实战-2.pom.xml标签说明

前言 持续更新中… pom.xml文件 1.<project> 这是pom.xml的根元素&#xff0c;所有的标签都包含在<project>…</project>之间。 2.<modelVersion> 指定当前POM模型的版本&#xff0c;对于maven2和maven3来说&#xff0c;它只能是4.0.0 <mode…

【linux】剖析底层——带你详细了解Linux内核源码的构成及其作用(1)

目录 一、arch文件 1.作用 2.arch文件下的子文件示意图 3.各个子文件的作用 &#xff08;1&#xff09;alpha &#xff08;2&#xff09;arc &#xff08;3&#xff09;arm &#xff08;4&#xff09;arm64 &#xff08;5&#xff09;cshy &#xff08;6&#xff09;…

8 加载数据集

文章目录前提知识了解数据集Mini-Batch常用术语DataLoader核心参数核心功能小tips课程代码实例课程来源&#xff1a; 链接课程文本部分来源&#xff08;参考&#xff09;&#xff1a; 链接以及&#xff08;强烈推荐&#xff09; Birandaの前提知识了解 enumerate函数 数据集 …

局域网中UTP连接,如何实现防止芯片损坏,防止信号产生各种误码,及实现CHIP之间的阻抗匹配

Hqst盈盛电子导读&#xff1a;局域网中UTP连接&#xff0c;如何实现防止芯片损坏&#xff0c;防止信号产生各种误码&#xff0c;及实现CHIP之间的阻抗匹配&#xff0c;浅谈网络滤波器作用一&#xff0c;在有线局域网中&#xff0c;计算机与服务器之间&#xff0c;计算机与路由器…

10、条件语句

目录 一、if语句的基本形式 1. if语句形式 2. if…else语句形式 3. else if语句形式 二、if的嵌套形式 三、条件运算符 四、switch语句 1. switch语句的基本形式 2. 多路开关模式的switch语句 一、if语句的基本形式 在if语句中&#xff0c;首先判断表达式的值&#x…

【BetterBench】2023年美赛辅导

通知 2023年美赛快开始啦&#xff0c;提醒大家比赛信息&#xff0c;比赛期间我会全称提供辅导&#xff0c;包括建模方案、实现代码&#xff01; 可以参考往年所有建模比赛&#xff0c;本人开源的建模方案及实现代码 2020-2023年所有数学建模竞赛专栏 报名信息 1.辅助报名截止…

【异常】前端Babel提示 Support for the experimental syntax ‘jsx‘ isn‘t currently enabled

一、报错内容 17:33:41 - Building for production... 17:34:13 ERROR Failed to compile with 5 errors5:34:09 PM 17:34:13 17:34:13 error in ./src/layout/components/Sidebar/Item.vue?vue&typescript&langjs& 17:34:13 17:34:13 Syntax Error…

《流浪地球2》看不懂?根服务器、权威解析,专业科普来了

随着《流浪地球2》的上映&#xff0c;关于国产硬科幻电影的话题也火爆起来&#xff0c;片中各种脑洞大开&#xff0c;科技设定可圈可点&#xff0c;例如量子计算机、脑机接口、太空电梯等。从专业角度来看&#xff0c;作为国产科幻大片之光的《流浪地球2》为了保证真实性确实狠…

二叉平衡树 之 红黑树 (手动模拟实现)

目录 1、红黑树的概念 2、红黑树的性质 3、红黑树节点的定义 4、红黑树的插入 5、红黑树验证 代码汇总 6、红黑树的删除&#xff08;了解&#xff09; 7、红黑树的应用 8、红黑树 VS AVL树 1、红黑树的概念 红黑树&#xff0c;就是一种特殊的二叉搜索树&#xff0c;每个…

MySQL详解(四)——高级 2.0

性能分析 Explain 使用EXPLAIN关键字可以模拟优化器&#xff08;不改变查询结果前提下&#xff0c;调整查询顺序&#xff0c;生成执行计划&#xff09;执行SQL查询语句&#xff0c;从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈 功能&#x…

ECharts线性渐变色示例演示(2种渐变方式)

第003个点击查看专栏目录Echarts的渐变色采用了echarts.graphic.LinearGradient的方法&#xff0c;可以根据代码中的内容来看如何使用。线性渐变&#xff0c;多用于折线柱形图&#xff0c;前四个参数分别是 x0, y0, x2, y2, 范围从 0 - 1&#xff0c;相当于在图形包围盒中的百分…

PTA L1-025 正整数A+B(详解)

前言&#xff1a;本期是关于正整数AB的详解&#xff0c;内容包括四大模块&#xff1a;题目&#xff0c;代码实现&#xff0c;大致思路&#xff0c;代码解读&#xff0c;今天你c了吗&#xff1f; 题目&#xff1a; 题的目标很简单&#xff0c;就是求两个正整数A和B的和&#xf…

用户使用苹果AirTag来追踪宠物存在风险,苹果Find My功能用处广

苹果的 AirTag 不失为追踪宠物的一种便捷方式&#xff0c;这样宠物即便挣脱宠物圈或者其它方式丢失&#xff0c;都可以通过“Find My”方式追踪定位。正如《华尔街日报》所指出的&#xff0c;这种方式也存在 AirTag 被宠物吞食的风险。 AirTag 的直径为 1.26 英寸&#xff0c…

【Faster R-CNN】之 Resize_and_Padding 代码精读

【Faster R-CNN】之 Resize_and_Padding1、前言&#xff1a;2、resize_image_and_bbox1&#xff09;先对图像做resize处理2&#xff09;再对 bounding box 做resize处理3、padding_images代码1、前言&#xff1a; 在上一篇文章 【Faster R-CNN】之 Dataset and Dataloader 代码…