野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14871|回复: 14

给中断优先级分组的作用是什么

[复制链接]
发表于 2020-7-18 22:23:30 | 显示全部楼层 |阅读模式
中断分组的作用是什么?
野火论坛202007182221519178..png
回复

使用道具 举报

发表于 2020-7-20 08:38:07 | 显示全部楼层
优先级分组就是为了,当同时出现有不同的中断要求的时候,根据优先级分组,哪个中断的优先级别高,就先去处理哪个中断,从高到低
回复 支持 反对

使用道具 举报

发表于 2020-7-20 21:33:54 | 显示全部楼层
方便你在干一件中断的时候去干更紧急的事
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-22 07:10:20 | 显示全部楼层
yhpzy 发表于 2020-7-20 08:38
优先级分组就是为了,当同时出现有不同的中断要求的时候,根据优先级分组,哪个中断的优先级别高,就先去处 ...

我用的是F103,有五个优先级分组,优先级分组也是有优先级的吗?如果有,分组的优先级高还是主优先级的优先级高,如果没有,分组的作用是什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-22 07:12:15 | 显示全部楼层
Wangwwd 发表于 2020-7-20 21:33
方便你在干一件中断的时候去干更紧急的事

你的意思是分组也是有优先级的吗?
回复 支持 反对

使用道具 举报

发表于 2020-7-22 08:59:44 | 显示全部楼层
分组是NVIC中断控制的功能,它是为了配置分组的类型;
跟中断优先级是两回事,中断优先级是每个中断的属性;
回复 支持 反对

使用道具 举报

发表于 2020-7-22 09:04:38 | 显示全部楼层
 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中
断嵌套,或者说高抢占式优先级的中断可以抢占低抢占式优先级的中断的执行。
 在抢占式优先级相同的情况下,有几个子优先级不同的中断同时到来,那么高子优先级的中断优
先被响应。
 在抢占式优先级相同的情况下,如果有低子优先级中断正在执行,高子优先级的中断要等待已被
响应的低子优先级中断执行结束后才能得到响应,即子优先级不支持中断嵌套。
 Reset、 NMI、 Hard Fault 优先级为负数,高于普通中断优先级,且优先级不可配置。
 对于初学者还有一个比较纠结的问题就是系统中断(比如:PendSV,SVC,SysTick)是不是一
定比外部中断(比如 SPI,USART)要高,答案:不是的,它们是在同一个 NVIC 下面设置的。
具体可以看这个链接:https://www.cnblogs.com/yangguang-it/p/7152549.html
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-22 22:55:01 | 显示全部楼层
蜗牛爬爬 发表于 2020-7-22 08:59
分组是NVIC中断控制的功能,它是为了配置分组的类型;
跟中断优先级是两回事,中断优先级是每个中断的属性 ...

感谢!受教了,一直没理解优先级分组的作用
回复 支持 反对

使用道具 举报

发表于 2020-7-22 23:58:54 | 显示全部楼层
本帖最后由 GorgonMeducer 于 2020-7-23 00:01 编辑

优先级有两种用法:
1、抢占:高优先级(高优先组)抢占低优先级(低优先组)
2、合作式加权排队:当大家都排队的情况下(不支持抢占),当同一组内的某个中断被处理完以后,同一组内下一个是谁优先被处理。

简单说就是:高组抢占低组,同组内按照优先级进行排队。从编程模型的角度来说,其实就是为中断增加了一种 合作式响应中断的 选项
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-23 07:37:12 | 显示全部楼层
尘缘里的记忆 发表于 2020-7-22 09:04
 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断服务程序执行过程中被响应,即中
断嵌套,或者 ...

感谢你分享的博客,受教了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-23 07:56:43 | 显示全部楼层
GorgonMeducer 发表于 2020-7-22 23:58
优先级有两种用法:
1、抢占:高优先级(高优先组)抢占低优先级(低优先组)
2、合作式加权排队:当大家都 ...

感谢!受教了,关于第二种用法,有些地方还需要麻烦你解释的再详细一点
1、怎么实现不支持抢占(排队的情况)?中断一般不是都是有优先级的吗?
2、同一组指的是同一个优先级分组吗?组内的中断是按照什么排序的呢?
再次感谢你能解疑答惑!
回复 支持 反对

使用道具 举报

发表于 2020-7-23 19:42:58 | 显示全部楼层
本帖最后由 王一 于 2020-7-23 20:04 编辑

中断分组是为了更好的管理中断!
举例来说:
中断设置位只有4
中断分组为:组2【抢占有2位,响应有2位】
                   与之对应得就是抢占优先级占2位,即4个抢占优先级等级:等级0--等级3【数值越小,优先级越高
                   与之对应得就是响应优先级占2位,即4个响应优先级等级:等级0--等级3【数值越小,优先级越高

中断响应原则:同一等级的抢占优先级,不用的响应优先级之间是不能被打断;若同一时刻,有两个不同响应优先级的中断发生,那么就先执行响应优先级高的中断
                       同一等级或者不用等级的响应优先级,高抢占优先级是可以打断的正在执行的低抢占优先级的中断,
eg:中断A:抢占优先级为3,响应优先级为1;
       中断B:抢占优先级为3,响应优先级为0;
       中断C:抢占优先级为2,响应优先级为3;
       中断D:抢占优先级为2,响应优先级为1;

当中断A在执行的时候,中断B发生,那么B就不能打断正在执行的A,只能等待A执行完后,才能执行B

当中断A在执行的时候,中断C发生,那么C就可以打断正在执行的A,先执行C,等待C执行完成后,再继续执行A

当中断A在执行的时候,中断C、中断D,同时发生,那么系统就响应优先高的D,等待D执行完,在执行C,最后再执行A





回复 支持 反对

使用道具 举报

发表于 2020-7-24 00:06:13 | 显示全部楼层
点不着的火 发表于 2020-7-23 07:56
感谢!受教了,关于第二种用法,有些地方还需要麻烦你解释的再详细一点
1、怎么实现不支持抢占(排队的情 ...

硬件本身就支持啊。如果几个中断拥有相同的组优先级:
> 如果这些中断的组内的优先级是相同的,则按照这些中断向量号从小到大进行排队(向量号越低,优先级越高)
> 如果这些中断组内的优先级是不同的,就按照优先级排序

无论如何,这些拥有相同组号的中断彼此之间是不能打断对方的——这就是所谓的合作式排队——你必须要等别人退出才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-27 21:40:20 | 显示全部楼层
GorgonMeducer 发表于 2020-7-24 00:06
硬件本身就支持啊。如果几个中断拥有相同的组优先级:
> 如果这些中断的组内的优先级是相同的,则按照这 ...

嗯嗯 受教了  谢谢你!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-27 21:41:06 | 显示全部楼层
王一 发表于 2020-7-23 19:42
中断分组是为了更好的管理中断!
举例来说:
中断设置位只有4位

感谢你能详解,受教了,谢谢你!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 13:29 , Processed in 0.048708 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表