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);     //清除中断
        
    }     
}

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

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

相关文章

AI跟踪报道第36期-新加坡内哥谈技术-这周的AI新闻铺天盖地

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

STM32重要参考资料

stm32f103c8t6 一、引脚定义图 二、时钟树 三、系统结构图 四、启动配置 (有时候不小心短接VCC和GND,芯片会锁住,可以BOOT0拉高试试(用跳线帽接)) 五、最小系统原理图 可用于PCB设计 六、常见折腾人bug…

谷歌推出多模态视频模型,自动生成丰富动作视频

谷歌的研究人员推出了一款多模态扩散模型——VLOGGER。 用户只需要向VLOGGER输入图像、语音,就能生成带语音、丰富动作的人物视频。VLOGGER基于扩散模型开发而成,并提出了一种全新的架构,将文本生成图像模型与空间、时间控制相结合&#xff…

二叉树算法练习day.2

102.二叉树的层序遍历 链接:. - 力扣(LeetCode) 题目描述: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入&a…

EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程 项目背景: 此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式),这些日志都已经按照不同环境输出到/home/dev /home/test1 /home/test2 目录下了,按照不同的应…

百度松果菁英班——机器学习实践一:海量文件遍历

飞桨AI Studio星河社区-人工智能学习与实训社区 🦐在指定目录下显示目录结构 !tree -L 显示级数限制 指定目录 如: !tree -L 3 ./data/ 表示:在目录 ./data/ 下显示目录结构,限制显示到第三级子目录或文件。这个命令通常在命…

基于单片机冬季供暖室温调节控制系统

**单片机设计介绍,基于单片机冬季供暖室温调节控制系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的冬季供暖室温调节控制系统是一种集温度检测、控制和显示功能于一体的智能化系统。该系统以单片机为…

基于Springboot+Vue实现前后端分离社团管理系统

一、🚀选题背景介绍 📚推荐理由: 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于社团管理也是十分常见的。过去使用手工的管理方式对大学生社团进行管理,造成了管理繁琐、难以维护等…

图解大型网站多级缓存的分层架构

前言 缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服务器,从进程内缓存到分布式缓存,其中缓存策略算法也是层出不穷。 假设一个网站,需要提高性能,缓存可以放在浏览器,可以放在反向代理服…

开源流程图表库(04):mxGraph,都是可视化编辑,导出使用。

mxGraph是一个用于创建和展示图形的JavaScript库。它提供了丰富的功能和工具,可以用于构建各种类型的图形应用程序,包括流程图、组织结构图、网络拓扑图等。 mxGraph的编辑器 一、mxGraph的特点和功能 以下是一些mxGraph的特点和功能: 强大…

ES10 学习

文章目录 1. Object.fromEntries()2. trimStart() 和 trimEnd()3. 数组的flat() 和flatMap()4. Symbol 对象的description 属性5. try ... catch(e){} 1. Object.fromEntries() Object.fromEntries() 方法允许你轻松地将键 值对列表转换为对象 let arr [["name",&qu…

Lanelets_ 高效的自动驾驶地图表达方式

Lanelets: 高效的自动驾驶地图表达方式 附赠自动驾驶学习资料和量产经验:链接 LaneLets是自动驾驶领域高精度地图的一种高效表达方式,它以彼此相互连接的LaneLets来描述自动驾驶可行驶区域,不仅可以表达车道几何,也可以完整表述车…

有效的括号--如果字符串没有左括号,或者字符串是右括号为开头,则存在括号不匹配和顺序不正确的情况公字符串无效

题目-有效的括号 ​ 一、分析题目 二、编写代码 typedef char STDataType;typedef struct Stack {STDataType* a; //int top; //相当于数组下标,注意栈为空时,top的值应该为?int capacity;//栈的容量 }ST;void STInit(ST* pst); void STD…

基于SSM框架就业管理系统

摘要 本论文主要讲述了基于SSM框架及MySQL数据库实现的就业管理系统的设计和开发过程。本论文中所讲的就业管理系统是通过所学的知识创办一个非商业性的网站平台,使所有想要就业信息查看的高校毕业生们与想要宣传自己公司的商家们都可以更方便快捷的进行就业和体验…

MobaXterm不显示隐藏文件

MobaXterm在左边显示隐藏文件,以.开头的文件,想让它不显示 点击方框圈中的不显示隐藏文件 隐藏文件不显示了

InterlliJ Debug方式启动 method breakpoints may dramatically show down debugging

使用idea在DEBUG的时候出现Method breakpoints may dramatically slow down debugging, 如图: 根据语义可能是断点打在方法上面了,导致在某个断点卡住了。 重启服务器和重启idea已然无解。 打开Breakpoints面板看看,(快捷键&…

【javaWeb Maven高级】Maven高级学习

Maven高级学习 分模块设计继承与聚合继承版本锁定聚合 私服资源的上传与下载本地私服配置 分模块设计 为什么需要进行分模块设计? 将项目按照功能拆分成若干个子模块,方便项目的管理维护,扩展,也方便模块间的相互调用&#xff0c…

电商技术揭秘六:前端技术与用户体验优化

文章目录 引言一、前端技术在电商中的重要性1.1 前端技术概述1.2 用户体验与前端技术的关系 二、响应式设计与移动优化2.1 响应式设计的原则2.2 移动设备优化策略2.3 响应式设计的工具和框架 三、交互设计与用户体验提升3.1 交互设计的重要性3.2 用户体验的量化与优化3.3 通过前…

【更新】中国区域创新能力指数数据集(无缺失值)(2001-2022年)

01、数据简介 中国区域创新能力指数是一个综合反映各地区在知识创造、知识获取、企业创新、创新环境和创新绩效等方面能力的指标。该指数基于一系列复杂的评价体系,包括多个层级的指标,以全面、准确地衡量中国各区域的创新能力。 《中国区域创新能力报…

在局域网内进行ARP欺骗攻击(Kali)_kali局域网攻击,从入门到真香

fping –asg 192.168.6.0/24 下图看到,同网段有四个活动IP 3、实施断网攻击 命令:arpspoof –i 网卡 –t 靶机IP地址 网关 -i 指定网卡 -t 持续不断攻击 我的命令:arpspoof –i eth0 –t 192.168.6.137 192.168.6.1 Kali中持续不断地发送arp应…