FreeRTOS操作系统学习——中断管理
中断管理介绍
嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务无法执行。 ISR要尽量快,否则:其他低优先级的中断无法被处理:实时性无法保证。
如果这个硬件中断的处理,就是非常耗费时间呢?对于这类中断的处理就要分为2部分:
- ISR:尽快做些清理、记录工作,然后触发某个任务
- 任务:更复杂的事情放在任务中处理
- 所以:需要 ISR 和任务之间进行通信
注意:只有以”FromISR”或”FROM_ISR”结束的 API 函数或宏才可以在中断服务例程中。
俩套API函数
在任务函数中,我们可以调用各类 API 函数,比如队列操作函数: xQueueSendToBack。但是在 ISR 中使用这个函数会导致问题,应该使用另一个函数: xQueueSendToBackFromISR,它的函数名含有后缀"FromISR",表示"从 ISR 中给队列发送数据"。FreeRTOS中很多API函数都有两套:一套在任务中使用,另一套在ISR中使用。后者的函数名含有"FromISR"后缀。
为什么要引入两套API函数?
很多 API 函数会导致任务计入阻塞状态;运行这个函数的任务进入阻塞状态;比如写队列时,如果队列已满,可以进入阻塞状态等待一会,ISR 调用 API函数时, ISR 不是"任务", ISR 不能进入阻塞状态。所以,在任务中、在 ISR 中,这些函数的功能是有差别的。
xHigherPriorityTaskWoken 参数
xHigherPriorityTaskWoken 的含义是:是否有更高优先级的任务被唤醒了。如果为pdTRUE,则意味着后面要进行任务切换。

可以看到,在任务中调用 API 函数可能导致任务阻塞、任务切换,这叫做"context switch",上下文切换。这个函数可能很长时间才返回,在函数的内部实现了任务切换。
xQueueSendToBackFromISR()函数也可能导致任务切换,但是不会在函数内部进行切换,而是返回一个参数:表示是否需要切换,函数原型与用法如下:
/*
* 往队列尾部写入数据,此函数可以在中断函数中使用,不可阻塞
*/
BaseType_t xQueueSendToBackFromISR(
QueueHandle_t xQueue,
const void *pvItemToQueue,
BaseType_t *pxHigherPriorityTaskWoken
);
/* 用法示例 */
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xQueueSendToBackFromISR(xQueue, pvItemToQueue, &xHigherPriorityTaskWoken);
if (xHigherPriorityTaskWoken == pdTRUE)
{
/* 任务切换 */
}

使用"FromISR"函数时,如果不想使用xHigherPriorityTaskWoken参数,可以设置为NULL。
ISR中任务切换
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken ); //使用汇编实现
//或者使用以下函数
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );//使用 C 语言实现
void XXX_ISR()
{
int i;
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
for (i = 0; i < N; i++)
{
xQueueSendToBackFromISR(..., &xHigherPriorityTaskWoken); /* 被多次调用 */
}
/* 最后再决定是否进行任务切换
* xHigherPriorityTaskWoken 为 pdTRUE 时才切换
*/
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}
中断延迟处理
如果在中断中需要处理的函数十分耗时,那么就要考虑分为以下俩个步骤进行处理
- ISR:尽快做些清理、记录工作,然后触发某个任务
- 任务:更复杂的事情放在任务中处理

俩套函数API

相关文章:
FreeRTOS操作系统学习——中断管理
中断管理介绍 嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务…...
DHCP中继实验(思科)
华为设备参考:DHCP中继实验(华为) 一,技术简介 DHCP中继,可以实现在不同子网和物理网段之间处理和转发DHCP信息的功能。如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的IP…...
基于SpringBoot的“心灵治愈交流平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“心灵治愈交流平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能界面图 登录、用户注册界面图 心灵专…...
【SpringBoot】自定义工具类实现Excel数据新建表存入MySQL数据库
🏡浩泽学编程:个人主页 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 文章目录 …...
Retelling|Facebook1
录音 Facebook 1 Retelling|Facebook1 复述转写 Today Im totally going to talk about Facebook. The aspects of this (its)rising fame and fortune, and the rise (小停顿)in(rising) fame and fortune of s founder Mark Zuckerberg, Mark Zuckerberg created this plat…...
【2024-03-12】设计模式之模板模式的理解
实际应用场景:制作月饼 过程描述: 一开始,由人工制作月饼, 第一个:根据脑子里面月饼的形状,先涅出月饼的形状,然后放入面粉和馅料把开口合并起来。 第二个:根据脑子里面月饼的形状&…...
Transformer模型引领NLP革新之路
在不到4 年的时间里,Transformer 模型以其强大的性能和创新的思想,迅速在NLP 社区崭露头角,打破了过去30 年的记录。BERT、T5 和GPT 等模型现在已成为计算机视觉、语音识别、翻译、蛋白质测序、编码等各个领域中新应用的基础构件。因此&#…...
【Kotlin】运算符函数、解构函数、中缀函数
1 一元运算符 1.1 符号和函数 符号函数aa.unaryPlus()-aa.unaryMinus()!aa.not()aa.dec()a--a.inc() 1.2 案例 fun main() {var stu Student("Tom", 13)println(-stu) // 打印: [moT, 31] }class Student(var name: String, var age: Int) {operator fun unaryM…...
springboot268码头船只货柜管理系统
码头船只出行和货柜管理系统的设计与实现 摘要 针对于码头船只货柜信息管理方面的不规范,容错率低,管理人员处理数据费工费时,采用新开发的码头船只货柜管理系统可以从根源上规范整个数据处理流程。 码头船只货柜管理系统能够实现货柜管理…...
Java面试题11MySQL之执行计划到事务及慢查询
你对MySQL执行计划怎么看 执行计划就是SQL的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数 在MySQL中,我们可以通过explain命令来查看执行计划。其语法如下: EXPLAIN SELECT * FROM table_name WHERE conditions;在…...
算法时空复杂度分析:大O表示法
文章目录 前言大O表示法3个时间复杂度分析原则常见的时间复杂度量级空间复杂度参考资料 前言 算法题写完以后,面试官经常会追问一下你这个算法的时空复杂度是多少?(好像作为一名算法工程师,我日常码代码的过程中,并没…...
threejs简单创建一个几何体(一)
1.下包引入 //下包 npm install three yarn add three//引入 import * as THREE from three2.创建场景,摄像机 // 1.创建场景const scene new THREE.Scene()// 2.创建摄像机//第一个参数是视角,一般在60-90之间,第二个参数是场景的尺寸,一般取显示器的宽高,第三个参数是开始位…...
msfconsole数据库连接不了的问题【已解决】
msfconsole数据库连接 1.msf数据库端口 msf使用的是postgresql,这个数据库默认端口是5432 单个模块的使用可以不需要数据库,但是模块与模块之间需要沟通的时候就会用到数据库。 2.查看msf数据库连接状态 db_status #msf内部查看systemctl status p…...
7. Linux进程环境
进程是操作系统运行程序的一个实例,也是操作系统分配资源的单位。在Linux环境中,每个进程都有独立的进程空间,以便对不同的进程进行隔离,使之不会互相影响。深入理解Linux下的进程环境, 可以帮助我们写出更健壮的代码。 在 Linux 中,进程是程序的一次执行过程,它包含了程…...
[linux] 静态图和动态图
动态图(Dynamic Graphs)和静态图(Static Graphs)通常用来描述深度学习框架中模型的构建方式。 静态图(Static Graphs) 静态图是指模型的计算图在运行前就被定义好并且编译优化的方式。也就是说,…...
1.Spring核心功能梳理
概述 本篇旨在整体的梳理一下Spring的核心功能,让我们对Spring的整体印象更加具体深刻,为接下来的Spring学习打下基础。 本片主体内容如下: Bean的生命周期依赖注入的实现Bean初始化原理推断构造方法原理AOP的实现这里要说明一下,我们这里说到的Spring,一般指的是Spring F…...
活动预告:如何培养高质量应用型医学人才?
在大数据时代与“新医科”建设的背景下,掌握先进的医学数据处理技术成为了医学研究与应用的重要技能。 为了更好地培养社会所需要的高质量应用型医学人才,许多高校已经在广泛地开展面向医学生的医学数据分析教学工作。 在“课-训-赛”育人才系列活动的…...
蓝桥杯算法错题记录-基础篇
文章目录 本文还在跟新,最新跟新时间3/11!!! 格式一定要符合要求,(输入,输出格式)1. nextInt () next() nextLine() 的注意事项2 .数的幂 a^2等3.得到最大长度(最大...&a…...
Java知识点之单例模式
1、单例模式(Binary Search) 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资…...
Flutter第三弹:常用的Widget
目标: 1)常用的Widget有哪些?有什么特征? 2)开发一个简单的登录页面。 一、Flutter常用Widget 对于Flutter来说,一切皆Widget. 常用的Widget,包括一些基础功能的Widget. 控件名称功能备注…...
OpenClaw定时任务:Qwen3.5-9B每日自动抓取行业资讯
OpenClaw定时任务:Qwen3.5-9B每日自动抓取行业资讯 1. 为什么需要自动化资讯服务? 作为一个技术从业者,每天早晨打开电脑的第一件事就是查看行业动态。但手动浏览十几个网站、筛选重复内容、整理关键信息的过程实在太耗费时间。更糟糕的是&…...
革命性游戏模组管理平台:XXMI启动器带你告别繁琐配置,一键畅玩所有二次元游戏
革命性游戏模组管理平台:XXMI启动器带你告别繁琐配置,一键畅玩所有二次元游戏 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 你是否曾经为了玩不同的二次…...
如何通过智能检测实现微信社交关系的高效管理?
如何通过智能检测实现微信社交关系的高效管理? 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRealFriends 在数字…...
3步解锁知识自由:ScienceDecrypting永久破解文档限制
3步解锁知识自由:ScienceDecrypting永久破解文档限制 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 项目地址: htt…...
[特殊字符] Python 装饰器实战学习知识点梳理文档(从错题到全对版)
📚 Python 装饰器实战学习知识点梳理文档(从错题到全对版) 一、核心基础概念 ✨(装饰器的“地基”) 1. 变量作用域(避坑前提)全局变量:函数外面定义,全程序都能使用局部变…...
华硕笔记本终极优化指南:用GHelper彻底释放硬件潜能
华硕笔记本终极优化指南:用GHelper彻底释放硬件潜能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar…...
OpenClaw安全防护指南:Qwen3-14b_int4_awq执行权限管控策略
OpenClaw安全防护指南:Qwen3-14b_int4_awq执行权限管控策略 1. 为什么需要关注OpenClaw的安全防护? 去年冬天,我在调试一个自动整理照片的OpenClaw任务时,不小心让AI误删了整年的旅行照片备份。那一刻我才真正意识到——当AI获得…...
Llama-3.2V-11B-cot 安全与合规指南:避免生成有害内容的过滤策略
Llama-3.2V-11B-cot 安全与合规指南:避免生成有害内容的过滤策略 最近在帮一个朋友部署一个基于视觉大模型的应用,他兴奋地给我展示各种有趣的图文对话功能。聊着聊着,他突然问了一个很实际的问题:“这玩意儿要是用户上传一张不合…...
MinerU智能文档理解服务:专为高密度文本图像设计的轻量级解决方案
MinerU智能文档理解服务:专为高密度文本图像设计的轻量级解决方案 1. 引言:文档处理的智能化革命 在数字化办公时代,我们每天都要面对大量PDF文档、扫描件和图像资料。这些文件往往包含复杂的版面结构:多栏排版、嵌套表格、数学…...
面试题杂记
1.问:react的Fabric实现原理答:实际上就是虚拟dom那一套东西,只不过换了个名词2.问:react的fiber架构实现原理答:在react15及以前的协调过程是基于栈(stack-based)的,缺点是一个组件…...
