- 简述
- 中断:处理器正在处理某件事的时候,请求处理器迅速处理,中断当前的操作,处理发生的事件,处理完毕,再回到原来被中断的地方继续工作
- 异常是指任何打断处理器正常运行,并且迫使处理器进入一个有特权的特殊指令执行的事件
- 中断机制避免CPU把大量时间耗费在等待、查询外设状态的操作上,提高系统实时性和执行效率
- 快进快出
- 异常分类
- 同步异常:处理器指令运行产生的事件引起的异常
- 异步异常:内外部硬件设备产生的事件引起的异常
- 引起中断的硬件
- 外设:外接硬件设备
- 向量中断控制器:NVIC
- 接收其它其它外设中断信号的输入,发出中断信号给CPU
- 可设置中断源的优先级、触发方式、打开和关闭中断源等
- NVIC最多支持240个中断,每个中断最多256个优先级
- CPU本身:响应中断请求,中断当前任务,执行中断程序
- 中断运行机制
- 产生中断
- 保存当前处理器状态信息
- 载入异常或者中断处理函数到PC寄存器
- 把控制权转交给处理函数并开始执行
- 当处理函数执行完毕,恢复处理器状态信息
- 从异常或中断中返回前一个程序执行点
- 中断延迟时间
- 硬件中断发生到开始执行中断处理程序的第一条指令的这段时间
- 任务延迟时间
- 中断发生到恢复到任务级代码的这段时间
- 中断的应用场景
- 略
- 中断延迟发布
- 分类:
- 直接发布(或称为释放):
- 延迟发布:
- 设置OS_CFG_ISR_POST_DEFERRED_EN选择,0:直接发布,1:延迟发布
- 使能中断延时发布,可以将中断级发布转换成任务级发布,
- 而且在进入临界段时也可以使用锁调度器代替关中断,
- 大大减小了关中断时间,有利于提高系统的实时性
- 分类:
- 相关函数
- os_int_q(); 中断队列信息块
- OS_InitQTaskInit(); 中断延迟发布任务初始化
- OS_IntQPost(); 中断延迟发布过程
- OS_IntQTask(); 中断延迟发布任务
- 例程
- 发布
/********************************************************* * 函数名:EXTI3_IRQHandler() * 描述 :按键中断服务函数 * 输入 :无 * 输出 :无 * 返回 :无 * 调用 :内部调用 **********************************************************/ extern OS_TCB AppTaskKeyTCB; void EXTI3_IRQHandler(void) { OS_ERR err; OSIntEnter(); //进入中断 if(__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_3) != RESET) //确保是否产生了EXTI_Line中断 { //发送任务信号量到任务AppTaskKey OSTaskSemPost( (OS_TCB *)&AppTaskKeyTCB, //目标任务 (OS_OPT )OS_OPT_POST_NONE, //没选项要求 (OS_ERR *)&err); //返回错误类型 //清除中断标志位 __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_3); } OSIntExit(); //退出中断 } - 接收
/************************************************** * 函数名:static void AppTaskKey(void *p_arg) * 描述 :按键检测 * 输入 :无 * 输出 :无 * 返回 :无 * 调用 :内部调用 **************************************************/ static void AppTaskKey(void *p_arg) { OS_ERR err; CPU_TS_TMR ts_int; CPU_INT32U cpu_clk_freq; (void)p_arg; cpu_clk_freq = BSP_CPU_ClkFreq(); //获取系统时钟 for(;;) { OSTaskSemPend( (OS_TICK )0, //阻塞任务,直接按键按下 (OS_OPT )OS_OPT_PEND_BLOCKING, //如果信号量不可用就等待 (CPU_TS *)0, //获取信号量被发布的时间戳 (OS_ERR *)&err); //返回错误类型 ts_int = CPU_IntDisMeasMaxGet(); //获取最大关中断时间,默认是关闭的 printf ( "触发按键中断,最大中断时间是%dus\r\n", ts_int / ( cpu_clk_freq / 1000000 ) ); } }
- 发布
- 下载验证
- 总结
- uC/OS支持中断嵌套,即当前中断可以被更高优先级中断打断
- 在OS中,很多时候我们会主动进入临界段,系统不允许当前状态被中断打断
- 进入与退出时需要调用OSIntEnter()和OSIntExit(),方便中断嵌套管理
- 参考资料:
- 正点原子《STM32F767 UCOS开发手册》
- 野火《uC/OS-III内核应用与开发》
- 《嵌入式实时操作系统 uC/OS-II原理及应用(第二版)》
- 官方源码
- 硬件平台:
- 正点原子阿波罗F767
- 软件平台:
- MDK5.2.5
- 库版本:
- TM32Cube_FW_F7_V1.4.0
- uC/OS-III版本
- UCOSIII 3.04
相关推荐
STM32F767--->基础知识
文章目录GPIO GPIO IO数量:STM32F7 最多有 9 组 IO,分别用大写字母表示,即 x=A/B/C/D/E/F/G/H/I,每组IO有16个管脚 包含的寄存器:STM32F7 每组 IO 有 10 个 32 位寄存器控制,其中常用的有 4 个配置寄存器+2 个数据寄存器+2 个复用功能选择寄存器,共 8 个 STM32F7 每组通用 I/O 端口包括 4 个 32 位配置寄存器(MODER、OTYPER、OSPEEDR 和 PUPDR)、2 个 32 位数据寄存器(IDR 和 ODR)、1
uc/os iii(一) 系统时钟及其中断服务函数
博客已转移至https://www.cnblogs.com/heart-flying/p/10148127.html
STM32F767串口通信------USART中断接收
1.基础配置 点击右边NVIC 将USART3 全局中断优先级改为1. 点击右上角生成代码。 2.编写代码 由CubeMX提供IRQhandler函数,需要自己写callback函数,查询手册. 简单介绍下函数执行顺序,当单片机接收到信息,先进入USART3_IRQHanderler函数,如图,在stm32f7xx_it.c下。 ...
UCOSIII编写中断服务函数
1.1、编写中断服务函数: void USART1_IRQHandler(void) { OSIntEnter(); //中断服务程序 OSIntExit(); } 1.2、进入中断服务函数以后使用函数OSIntEnter() void OSIntEnter (void) { if (OSRunning != OS_STATE_OS_RUNNING) ...
STM32的中断和事件
学习单片机一贯的套路,搞完时钟和GPIO就要折腾中断了。1. 中断和异常的区别1.1 中断是指系统停止当前正在运行的程序转而其他服务,可能是程序接收了比自身高优先级的请求,或者是人为设置中断,中断是属于正常现象。 1.2 异常是指由于cpu本身故障、程序故障或者请求服务等引起的错误,异常属于不正常现象。Cortex-M3内核总共支持256个中断,其中包含16个内核异常和240个外部中断,但是各个芯
STM32F767 按键输入编写外部中断实验
在USER目录里打开工程,HARDWARE\exti.c文件内有详细的编写外部中断流程。实验室配合按键输入编写的外部中断。使用的开发板是正点原子的stm32F767
UCOSIII的中断和时间管理
UCOSIII(也称为µC/OS-III)的中断管理是其实时操作系统(RTOS)功能的重要组成部分。中断是CPU的一种常见特性,用于向CPU通知异步事件的发生,使得CPU能够暂停当前正在执行的程序,转而执行中断服务程序(ISR)。在UCOSIII中,中断管理涉及多个方面,包括等。
具身智能:从理论突破到场景落地的全解析
具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。
【15】uC/OS-III应用开发————目录
uC/OS-III的几个重要特性 移植uC/OS-III到STM32F767 创建任务(STM32F767) 启动流程 任务管理 消息队列 信号量 互斥信号量 事件 软件定时器 任务信号量 任务消息队列 RAM内存管理 异常与中断管理 CPU利用率及堆栈检测统计 ...
【UE5】多用户协同编辑实战:从配置到实时协作
本文详细介绍了在虚幻引擎5中配置和使用多用户协同编辑功能的完整流程。从启用Multi-User Editing插件、配置UDP Messaging网络通信,到启动服务器、创建会话并实现实时协作,提供了从环境准备到实战协作的清晰指南。文章还分享了资产同步、场景分批、对象锁定等实用技巧,并强调了网络配置与版本一致性等关键避坑点,旨在帮助中小型团队提升关卡设计和原型开发的协作效率。
(二)目标检测之 HOG+SVM 算法
文章目录一、概述二、方法概述三、积分图四、AdaBoost五、级联检测六、结果七、复现八、总结参考资料 一、概述 梯度直方图HOG(Histogram of Oriented Gradients)是法国人Dalal在2005年CVPR会议上提出的特征提取算法,并将其与 SVM 配合,用于行人检测。论文地址:Histograms of oriented gradients for human detection HOG有个优点,提取的边缘和梯度特征能很好的抓住局部形状的特点,且因是对图像做了Gamma
中断管理
在 uC/OS 系统中,中断相当于一个优先级最高的任务。中断一般用于处理比较紧急的事件,而且只做简单处理,例如标记该事件,带退出中断后再做详细处理。在使用 uC/OS系统时,一般建议使用信号量、消息或事件标志组等标志中断的发生,将这些内核对象发布给处理任务,处理任务再做详细处理。 在使用 uC/OS 系统时,一般建议使用信号量、消息或事件标志组等标志事件的发生,将事件发布给处理任务,处理...
Mac终端SSH连接腾讯云服务器保姆级教程(附秘钥管理技巧)
本文提供Mac终端SSH连接腾讯云服务器的详细教程,涵盖密钥生成、权限设置、连接优化及高级管理技巧。通过清晰的步骤和实用配置,帮助用户安全高效地管理远程服务器连接,特别适合开发者和运维人员参考。
STM32F767 EEPROM 硬件IIC 中断
IIC中断
SAP UI5 控件剖析系列之 sap.m.DatePicker:单日选择的工程化用法、最佳实践与常见坑
在 SAP UI5 的输入控件族里,是最常被使用的日期选择控件。它把一个可编辑的输入框与一个弹出的日历整合在一起,允许用户用触摸、鼠标或键盘在本地化格式下选择某一天;控件既可以从弹出的日历里点选,也可以直接在输入框里键入日期。官方 Fiori 设计规范对它的定位就是:完成单个日期的选择,不牵涉时间,也不负责跨天的范围选择。
《HiVT: Hierarchical Vector Transformer for Multi-Agent Motion Prediction》论文阅读之HiVT
目录摘要1.介绍2.相关工作3.方法3.1. 总体框架3.2 场景表示 3.3 分层向量Transformer3.3.1 局部编码器3.3.2 全局交互模块3.3.3 多模态未来解码器3.4 训练4.实验4.1 实验设置4.2 消融研究 4.3. 结果5.结论 准确预测周围交通参与者的未来运动对于自动驾驶车辆的安全至关重要。最近,矢量化方法由于能够捕捉交通场景中的复杂交互而在运动预测领域占据主导地位。然而,现有的方法忽略了问题的对称性并且受到昂贵的计算成本的影响,面临着在不牺牲预测性能的情况
STM32F767 关于串口接收中断出错后禁止中断的问题
UART中断
Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)
自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...
从0到1教你写UCOS-III 第九部分:临界段
9.1 临界段简介: 临界段代码,也称作临界域,是一段不可分割的代码。 uCOS 中包含了很多临界段代码。如果临界段可能被中断,那么就需要关中断以保护临界段。如果临界段可能被任务级代码打断,那么需要锁调度器保护临界段。 临界段用一句话概括就是一段在执行的时候不能被中断的代码段。在 uCOS 里面,这个临界段最常出现的就是对全局变量的操作,全局变量就好像是一个枪把子,...
android studio 2022打开了v1 签名但是生成的apk没有v1签名问题
我使用了Android Studio Flamingo | 2022.2.1 Patch 2版本的IDE编译了一个apk,但是apksigner查看apk的签名信息时,发现只有v2签名,没有v1签名。试着改小一下minSdkVersion 为23重新编译apk,再检测一下签名版本v1居然打开了!参考网上搜索到的方法,手动在build.gradle里面添加。但是编译出来的apk还是只有v2的签名。里面提到了v1签名还和。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
μC/OS-II中缩短中断关闭时间的方法
μC/OS-II中缩短中断关闭时间的方法 在实时操作系统中,由于是多任务的并发运行,所以在进入一些临界区时为了保证多任务的正常运行要关中断。而最大关中断时间是衡量一个实时操作系统性能的重要指标,因为外部的输入一般都是通过中断方式来通知系统的,系统如果关中断时间长,必然不能及时接收中断,对中断的及时处理就更谈不上。 更重要的是,有些应用场合对关中断的时间有非常严格的要求。例如,在电力系统
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
2019年计算机操作系统考研真题
2019年全国硕士研究生招生考试计算机科学与技术学科联考 操作系统部分 一、试题 下列关于线程的描述中,错误的是 A.内核级线程的调度由操作系统完成 B. 操作系统为每个用户级线程建立一个线程控制块 C. 用户级线程间的切换比内核级线程间的切换效率高 D. 用户级线程可以在不支持内核级线程的操作系统上实现 下列选项中,可能将进程唤醒的事件是 I. I/O结束 . II.某进程退出临界区 III.当前进程的时间片用完 A.仅 I B.仅 III C.仅 I、II D. I 、II、 III 下列关于系统调用
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
uCOS-II 基础入门教程(十一)
任务之间的通讯与同步 在µC/OS-II中,有多种方法可以保护任务之间的共享数据和提供任务之间的通讯。在前面的章节中,已经讲到了其中的两种: 一是利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关闭中断和打开中断。当两个任务或者一个任务和一个中断服务子程序共享某些数据时。 二是利用函数OSSchedLock()和OSSchekUnlock()对µC/OS...
关于uCOS-II进出临界区时使用开关中断方式的疑问
这两天闲来无事,正在移植uCOS-II,看见很多人这样实现进入与退出临界区的两个函数: “*OS_ENTER_CRITICAL()&OS_EXIT_CRITICAL().这两个函数分别是退出临界区和进入临界区的宏指令实现。主要用于在进入临界区之前关闭中断,在退出临界区的时候恢复原来的中断状态。它的实现比较简单,可以直接开关中断来实现,也可以通过保存关闭/ 恢复中断屏蔽位来实现。” 如果进入临界
STM32F767串口配置问题(UART、USART)
配置都一样。
【13】uC/OS-III应用开发————>CPU利用率及堆栈检测统计(STM32F767)
下载验证 总结 uC/OS支持中断嵌套,即当前中断可以被更高优先级中断打断 在OS中,很多时候我们会主动进入临界段,系统不允许当前状态被中断打断 进入与退出时需要调用OSIntEnter()和OSIntExit(),方便中断嵌套管理 参考资料: 正点原子《STM32F767 UCOS开发手册》 野火《uC/OS-III内核应用与开发》 《嵌入式实时操作系统uC...

4800



被折叠的 条评论
为什么被折叠?



