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

立志最细,FreeRtos的中断管理(Interrupt Management)函数,详解!!!

        前言:本文参考,韦东山老师开发文档,连接放在最后。

为什么需要中断管理函数?

        在FreeRtos操作系统中,需要实时响应性,也就是随时随地必须保证正常多任务的运行,如果有中断发生,因为中断的优先级是最高的,这就导致了,中断中不能有大量执行的任务函数,或者在中断中不能有大量的任务进行切换调用,保证中断的执行是一瞬间,保证RTOS的,实时响应性。否则多任务就不能并发运行

       这就导致了,在中断里面调用函数是不能有延迟等待的,和不能有更高优先级的任务进行切换的,如果有切换因为,中断函数的优先级始终是最高的,被切换的普通函数始终是执行不了的。

        同时因为中断内不能有延时函数,所以就常用函数都有中断版本,专门用在中断函数内执行的函数,这些函数没有阻塞延时时间,有参数会记录是否有更高优先级的任务发生,如果有在中断结束后,进行任务切换执行,实际执行是在中断结束之后由任务调度器完成。

        到这里,我们知道了,函数有中断版本,是为了保证中断中没有延时,同时在函数内没有函数调用,以及中断版本多出来的参数就是为了,记录是否有更高优先级的任务被调用,如果有在中断执行结束后,由任务调度器调用任务。

函数比较

        FreeRtos操作系统的 队列 信号量 事件组 软件定时器 任务通知 都有两套版本的函数,一套用来调用在普通任务上下文,一套被用在中断任务上下文,具体表格如下。

类型普通任务上下文中断任务上下文
队列(queue)xQueueSendToBackxQueueSendToBackFromISR
队列(queue)xQueueSendToFrontxQueueSendToFrontFromISR
队列(queue)xQueueReceivexQueueReceiveFromISR
队列(queue)xQueueOverwritexQueueOverwriteFromISR
队列(queue)xQueuePeekxQueuePeekFromISR
信号量(semaphore)xSemaphoreGivexSemaphoreGiveFromISR
信号量(semaphore)xSemaphoreTakexSemaphoreTakeFromISR
事件组(event group)xEventGroupSetBitsxEventGroupSetBitsFromISR
事件组(event group)xEventGroupGetBitsxEventGroupGetBitsFromISR
任务通知(task notificationxTaskNotifyGivevTaskNotifyGiveFromISR
任务通知(task notificationxTaskNotifyxTaskNotifyFromISR
软件定时器(software timer)xTimerStartxTimerStartFromISR
软件定时器(software timer)xTimerStopxTimerStopFromISR
软件定时器(software timer)xTimerResetxTimerResetFromISR
软件定时器(software timer)xTimerChangePeriodxTimerChangePeriodFromISR

        这两套函数参数区别只有,最后以为,在普通任务版本中的,最后一位参数是,如有阻塞愿意等待的时间,中断版本参数是,是否记录有更高优先级的任务发生,并在中断函数结束后是否调用

BaseType_t xQueueOverwrite(QueueHandle_t xQueue,const void * pvItemToQueue);
BaseType_t xQueueOverwriteFromISR(QueueHandle_t xQueue,const void * pvItemToQueue,BaseType_t *pxHigherPriorityTaskWoken);

xHigherPriorityTaskWoken参数

        中断函数里面,这个是最后的参数,作用是记录是否在中断的过程,中是否有更高优先级的任务被唤醒了 ,这里需要弄清楚的一点是,在中断函数执行过程中被唤醒的函数的比较对象不是中断函数,而是在中断函数之前被中断函数打断执行的普通任务函数,这两个任务相互比较优先级的大小。    

       xHigherPriorityTaskWoken这个参数最重要的是,这个参数首先有用户调用时传递给程序,但是它的具体值(pdTRUE或pdFALSE)在函数运行过程中可以由程序去修改。 

BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendFromISR(myQueue, &data, &xHigherPriorityTaskWoken);

        在上面事例程序里面,FreeRtos会检查在中断运行的过程中,是否有比中断发生前执行函数的优先级更高优先级的任务被唤醒,如有 xHigherPriorityTaskWoken 这个参数将被程序设置改变pdTRUE。

        所以当我们在ISR里面调用这些中断函数的时候只需要将 xHigherPriorityTaskWoken 这个参数设置为 pdFALSE,剩下的FreeRtos在运行的时候会自己设置,如果最后为pdTRUE就代表在中断结束后需要切换任务运行,如有依然是pdFALSE,就继续执行被中断打断的任务。

        到这里,我们知道了, xHigherPriorityTaskWoken的值虽然是通过参数手动传递的,但是在FreeRtos运行的过程中,会根据任务唤醒情况去设置 xHigherPriorityTaskWoken的值。当值被设定之后,通过调用 portYIELD_FROM_ISR() 在中断响应函数最后,来完成任务的切换。

中断的延迟处理定义

        如果在ISR中,中断函数的响应本身就是耗时的,可以使用 中断的延时处理(Deferring interrupt processing) 

·ISR :中清除中断标志位,清理,记录工作。

·任务:将更加复杂的事情放在任务重处理。

                                        欢迎指正,希望对你,有所帮助!!!

[10-1]_事件组的本质_哔哩哔哩_bilibili

相关文章:

立志最细,FreeRtos的中断管理(Interrupt Management)函数,详解!!!

前言:本文参考,韦东山老师开发文档,连接放在最后。 为什么需要中断管理函数? 在FreeRtos操作系统中,需要实时响应性,也就是随时随地必须保证正常多任务的运行,如果有中断发生,因为中…...

作业2-线性回归的Matlab代码实现

一、前言 相关配置:Matlab 2020a(版本的影响应该不大,.m代码基本都能运行,个人感觉就是Simulink对版本的要求高一些) 二、任务描述 基于近两节课的理论推导,用代码实现线性回归,并对预测结果进…...

用jQuery在canvas上绘制绝对定位的元素

在Web开发中,我们经常需要在canvas上精确定位和绘制元素。虽然canvas本身不支持DOM元素的定位,但我们可以借助jQuery来实现这一功能。本文将介绍如何使用jQuery在canvas上实现元素的绝对定位。 1. 基本思路 我们的基本思路是: 创建一个包含canvas的容器div将需要定位的元素放…...

Android中 tools:text 和 android:text区别

首先引入命名空间 <androidx.constraintlayout.widget.ConstraintLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"/androidx.constraintlayout.widget.ConstraintLayout> tools:te…...

Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)

0x01 产品简介 GutenKit 是一个WordPress的页面构建器,在 Gutenberg 设计您的下一个 WordPress 网站。借助 Gutenberg 的原生拖放界面、50+ WordPress 块、14+ 多功能模块和 500+ 模板,您可以在几分钟内创建专业、响应迅速的 Web 内容。 0x02 漏洞概述 Wordpress GutenKit…...

Redis历史漏洞未授权RCE复现

Redis是一个开源的内存数据库&#xff0c;它用于存储数据&#xff0c;并提供高性能、可扩展性和丰富的数据结构支持。 Redis复现文章 Redisssrf漏洞利用探测内网 RedisInsight/RedisDesktopManager可视化连接工具 漏洞原理 &#xff08;1&#xff09;redis绑定在 0.0.0.0:…...

Greenhills学习总结

学习背景&#xff1a;近期参与xx项目过程中&#xff0c;遇到较多的关于代码集成编译的知识盲区&#xff0c;因此需要进行相关知识的学习和扫盲。 参考资料&#xff1a;GreenHills2017.7编译手册:本手册是GreenHills 2017.7.14版编译器的软件使用手册。该手册详细介绍了GreenHi…...

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…...

【27续】c++项目练习

定义一个或多个类&#xff0c;来描述以下需求&#xff1a; 汽车&#xff0c;有多个轮胎&#xff0c;一个发动机&#xff0c;品牌&#xff0c;型号, 价格&#xff0c; 行驶里程。 轮胎&#xff0c;有品牌&#xff0c;尺寸&#xff0c;气压。 发动机&#xff0c;有品牌&#x…...

Lazarus Query转EXCEL功能

Lazarus Query转EXCEL功能 需要用到控件XMLXSDExporter1 procedure SaveToExcel(AQuery:TSQLQuery); var SaveDialog: TSaveDialog; Ext:String; begin SaveDialog : TSaveDialog.Create(nil); SaveDialog.Filter:Excel 97-2003文件(*.xls)|*.XLS; if SaveDialog.Exec…...

AnaTraf | 深入探讨DNS流量分析:保障网络稳定性的关键

目录 什么是DNS流量分析&#xff1f; DNS流量的组成 为什么进行DNS流量分析&#xff1f; DNS流量分析在IT运维中的应用 1. 故障排查 2. 性能监控与优化 3. 安全检测 AnaTraf 网络性能监控系统NPM | 全流量回溯分析 | 网络故障排除工具 在当今数字化时代&#xff0c;互联…...

P1017 [NOIP2000 提高组] 进制转换

题目是意思就是转化 负进制 题干给定内容确实看不懂 我是看了别人的题解才会的 注意点&#xff1a;进制中不能出现负数&#xff08;解决方法 向前借一位 这是核心代码&#xff09;抓住 被除数除数*商余数 if(tp<0){//模是负数 就要转化为正数tp-y;xy;}//自己在纸上模拟一…...

计算机网络—vlan(虚拟局域网)

内容补充 冲突域 如果两台设备同时发送数据&#xff0c;他们的数据会互相干扰&#xff0c;那么他们就处于同一冲突域&#xff0c;例如集线器&#xff08;总线型&#xff0c;所有设备共享带宽&#xff09;的所有端口都处于冲突域。 广播域 如果一台设备发送数据&#xff0c;…...

C++头文件大全及解释

在C编程中&#xff0c;头文件起到了非常重要的作用。它们包含了函数声明、类定义和其他预处理指令&#xff0c;为程序提供了所需的各种功能和库。本文将介绍一些常见的C头文件&#xff0c;并提供具体实例来说明它们的用途和解释。 1. <iostream> 这是C标准库中最常用的头…...

基于 Django 的电商比价系统

想在毕业设计中展示自己的开发能力吗&#xff1f;今天给大家推荐一个绝对能让你脱颖而出的项目——基于 Django 框架的电商比价系统&#xff01;主打实用创新&#xff0c;你一定能用它拿下好成绩&#xff5e;&#x1f929; ✨项目核心功能亮点&#xff1a; 完善的用户系统&…...

Excel重新踩坑2:Excel数据类型;自定义格式(设置显示格式);分列操作;其他常用操作;一些重要操作

0、Excel数据类型&#xff1a;文本、数字、逻辑值、错误值 文本数据类型&#xff1a;输入什么显示什么&#xff1b;常见错误值 VALUE&#xff1a;文本与数字运算&#xff1b; DIV/0&#xff1a;分母为0&#xff1b; NAME&#xff1a;公式名称错误&#xff1b; N/A&#xff1a;…...

python从0快速上手(十四)数据库操作

Python学习&#xff1a;数据库操作篇 在这个信息爆炸的时代&#xff0c;数据库就像是一个个巨大的宝藏库&#xff0c;里面藏着无数珍贵的数据宝石。而Python&#xff0c;就是那把能够打开这些宝藏库的神奇钥匙。在这一章中&#xff0c;我们将一起学习如何使用Python来操作数据…...

【热门主题】000004 案例 Vue.js组件开发

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

Ingress-nginx中HTTPS的强制转发

文章目录 在使用aws 的NLB转发流量到ingress时&#xff0c;发现NLP上生成的转发配置不符合正常预期&#xff0c;如下图&#xff1a; ingress-nginx service 配置如下&#xff1a; apiVersion: v1 kind: Service metadata:annotations:service.beta.kubernetes.io/aws-load-b…...

C++深入探寻二叉搜索树:数据管理的智慧之选

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 前言&#xff1a; 我们在前面已经学习过有关…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时&#xff0c;性能会显著下降。以下是优化思路和简易实现方法&#xff1a; 一、核心优化思路 减少 JOIN 数量 数据冗余&#xff1a;添加必要的冗余字段&#xff08;如订单表直接存储用户名&#xff09;合并表&#xff1a;将频繁关联的小表合并成…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...