FreeRtos入门-7 中断管理

中断管理

中断管理相比非中断的优势

1,简洁和效率。

2,同步和安全。提供了中断安全的操作,确保在中断上下文中执行时不会引发竞态条件或破坏系统状态。

3,通过配置中断的优先级,可以确保高优先级的中断能够立即响应,而低优先级的中断则可以在需要时等待

4,系统稳定性:非管理的中断通常直接将中断服务程序挂到中断向量表上,这需要用户自己处理上下文的保存与恢复。如果处理不当,可能会导致堆栈错误。相比之下,通过FreeRTOS进行中断管理可以确保这些操作的正确性和一致性,从而提高系统的稳定性。

FreeRTOS 中很多 API 函数都有两套,

为什么不使用同一套函数,在函数里面判断用任务还是ISR

使用同一套函数的话,需要增加额外的判断代码、增加额外的分支,是的

函数更长、更复杂、难以测试

在任务、ISR 中调用时,需要的参数不一样,

如果强行把两套函数揉在一起,会导致参数臃肿、无效

任务中使用

ISR 中使用

API函数会导致任务进入阻塞

ISR不是任务,ISR不能进入阻塞

需要指定超时时间,表示如果不成功就阻塞一会

不需要指定超时时间,无论是否成功都要即刻返回

队列(queue)

xQueueSendToBack

xQueueSendToBackFromISR

xQueueSendToFront

xQueueSendToFrontFromISR

xQueueReceive

xQueueReceiveFromISR

xQueueOverwrite

xQueueOverwriteFromISR

xQueuePeek

xQueuePeekFromISR

信号量(semaphore)

xSemaphoreGive

xSemaphoreGiveFromISR

xSemaphoreTake

xSemaphoreTakeFromISR

事件组(event group)

xEventGroupSetBits

xEventGroupSetBitsFromISR

xEventGroupGetBits

xEventGroupGetBitsFromISR

任务通知(task notification)

xTaskNotifyGive

vTaskNotifyGiveFromISR

xTaskNotify

xTaskNotifyFromISR

软件定时器(software timer)

xTimerStart

xTimerStartFromISR

xTimerStop

xTimerStopFromISR

xTimerReset

xTimerResetFromISR

xTimerChangePeriod

xTimerChangePeriodFromISR

xHigherPriorityTaskWoken

含义是:是否有更高优先级的任务被唤醒了。

如为pdTRUE,则意味着后面要进行任务切换。

*pxHigherPriorityTaskWoken 等于 pdTRUE:函数的操作导致更高优先级的任务就绪了,ISR 应该进行任务切换

*pxHigherPriorityTaskWoken 等于 pdFALSE:没有进行任务切换的必要

不在"FromISR"函数内部进行任务切换,而只是标记一下而已呢

这些带ISR后缀的函数,不会发起调度,会唤醒任务,但不会引起调度,会在xHigherPriorityTaskWoken记录是否需要调度

portYIELD_FROM_ISR(xHigherPriorityTaskWoken);

这条代码根据上面的变量来切换是否需要调度

这条代码是触发调度,不是即刻引起调度

//更改上诉的按键中断管理的代码
void EXTI0_IRQHandler(void)
{static int cnt = 0;BaseType_t xHigherPriorityTaskWoken;if(EXTI_GetITStatus(EXTI_Line0) != RESET){printf("EXTI0_IRQHandler cnt = %d\r\n", cnt++);/* 使用定时器消除抖动 *///    xTimerReset(xMyTimerHandle, 0); /* Tcur + 2000 */   //按键触发后,复位定时器,如果有多次抖动,会多次复位,直至最后一次进入按键中断后,开始记录2000ms,这里的2000ms为了调试方便,实际运用20ms即可xTimerResetFromISR(xMyTimerHandle, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken);key_start = xTaskGetTickCount() ;printf("key_start = %d\r\n",key_start);EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断}     
}

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

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

相关文章

配置Mysql集群主从复制报错

配置Mysql集群主从复制报错: 我在master创建了一个数据库(demo_ds_0),然后又快速删除了。然后又再次创建了 demo_ds_0, 发现 slave 数据库没有将 demo_ds_0 库同步过来。 后面在 slave 数据库中执行 show slave status 发现 SLave_IO_Running 字段是 …

浏览器控制台(console)中JS的常用方法:获取元素、鼠标点击、键盘输入等

文章目录 1.获取元素的常用方法(1)获取tabs列表(国内版/国际版)2.模拟输入框input的输入3.模拟点击click()1.获取元素的常用方法 // 1 根据元素IDlet img = document.getElementById("m1");// 2 根据元素标签--元素列表let div

OpenHarmony开发-系统烧录

本文详细介绍了烧录OpenHarmony系统到开发板的操作流程。从基础的硬件准备和软件环境设置入手,详细说明了如何配置开发环境、构建系统镜像等过程,详细描述了烧录过程中的关键步骤,以及如何使用专用工具将OpenHarmony系统镜像传输到开发板。同…

蓝桥杯每日一题:公约数(gcd)

题目描述: 给定两个正整数 a 和 b。 你需要回答 q 个询问。 每个询问给定两个整数 l,r,你需要找到最大的整数 x,满足: x 是 a和 b 的公约数。l≤x≤r。 输入格式 第一行包含两个整数 a,b。 第二行包含一个整数 q。 接下来…

力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日

1.题目描述 2.知识点 (1)执行步骤如下: 初始化 s “abcdefg” 和 k 2 将字符串分割成长度为 2k 4 的块。 对每个块中的前 k 2 个字符进行反转。 执行过程 1)第一次循环(i 0) start 0 end Math.min(0…

当下鸿蒙开发热潮,大前端开发有没有必要搞!!!

鸿蒙到底好不好?要不要搞? Android开发反正目前工作感觉也不好找,即便是上海这样的大城市也难搞,人员挺饱和的。而且年前裁员的公司那么多,再看自己,年龄不是优势;技术不是优势,想想…

前端进阶特训营-班会

程邵非(winter):javascript专家 夏然(全栈然叔):Vue3.0 工程化--大项目,工程化有专门团队。 杨涛(村长):Vue3.0 架构师 高少云(bubucuo):React18 课程设计 1.前端基础-程邵非 建立前端体系架构 重新理解JS,CSS,HTML的底层原理 理解前端工程师…

16 - 程序计数器和内存

---- 整理自B站UP主 踌躇月光 的视频 1. 程序计数器 程序计数器需要支持后续程序的运行,需要支持跳转,所以需要一个预置数的功能。我们在 ALU 前面加上个寄存器。 2. 内存控制器 3. 通过程序计数器读取内存 辅助工具 4. 实验工程 【16 - 程序计数器和…

【C++】红黑树讲解及实现

前言: AVL树与红黑树相似,都是一种平衡二叉搜索树,但是AVL树的平衡要求太严格,如果要对AVL树做一些结构修改的操作性能会非常低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更…

降低笔记本电脑噪音的七种方法,看下有没有适合你的

序言 无论是玩游戏、浏览网络还是做严肃的工作,差不多都有这么一台笔记本电脑,它有足够的处理能力来处理几乎任何事情。不幸的是,它可能会变得非常大声,但有办法来遏制这种噪音。 清洁通风口和风扇,并使用硬表面 如果你的笔记本电脑现在比过去运行同样的软件时声音更大…

继承 多态 向上转型 向下转型

一、什么是继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。当然,如果在父类中拥有私有属性(private修饰)&#xff…

【MySQL基础】MySQL基本操作详解

系列文章目录 第1篇:【MySQL基础】MySQL介绍及安装 第2篇:【MySQL基础】MySQL基本操作详解 文章目录 ✍1,数据库操作     🔍1.1,查看数据库     🔍1.2,创建数据库     🔍1.3,选择数据库    …

腾讯云添加域名后不生效

问题原因 添加域名后不生效可能是因为没有加CDN域名解析 解决步骤

算法| ss 滑动窗口

3.无重复字符的最长子串209.长度最小的子数组1052.爱生气的书店老板 水果成篮 删除子数组的最大得分 3.无重复字符的最长子串 /*** param {string} s* return {number}*/ // 思路 // 滑窗三问三答 // 右指针是谁 // 左指针什么时候移动 偏爱while循环 // 结果更新 var leng…

MacOS Docker 可视化面板 Portainer

一、简介 Portainer 是一个可视化的容器镜像图形管理工具,使用 Portainer 可以轻松构建、管理和维护Docker 环境。 而且完全免费(portainer-ce 是免费的,portainer-ee 是需要授权的,今天安装的是 portainer-ce 版本)&…

leetcode599-Minimum Index Sum of Two Lists

题目 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假…

Java多态练习2

设计金融产品类Financial,属性包括产品名称、产品介绍、起投金额、产品期限(int)、年化收益(百分数);方法包括发布、截止、投资。 设计金融产品类子类: 基金产品Fund,继承金融产品类…

Jenkins (三) - 拉取编译

Jenkins (三) - 拉取编译 通过Jenkins平台 git 拉取github上项目,通过maven编译并打包。 Jenkins 安装 git 插件 Manager Jenkins -> Plugins -> Available plugins -> Git 打包编译检验 FressStyle 风格编译 New Item输入 item name Spring-Cloud-1…

LeetCode---127双周赛

题目列表 3095. 或值至少 K 的最短子数组 I 3096. 得到更多分数的最少关卡数目 3097. 或值至少为 K 的最短子数组 II 3098. 求出所有子序列的能量和 一、或值至少k的最短子数组I&II 暴力的做法大家都会,这里就不说了,下面我们来看看如何进行优化…

JDK1.8 有哪些新特性

JDK 1.8引入了多个新特性,显著改善了Java语言的函数式编程能力、集合操作和日期时间处理。以下是一些主要的新特性: Lambda表达式: Lambda表达式提供了一种清晰简洁的方式来表示一段可执行的代码,允许将函数作为参数传递给方法。 // 之前的…