打印
[STM32F1]

【求助】疑惑。。stm32有个概念叫几个中断使用同个响应程序

[复制链接]
1915|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
970253146|  楼主 | 2015-7-29 16:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
比方说有两个中断源A和B(使用同一个中断响应程序interrupt),A的抢占优先级大于B,然后他俩的响应优先级是一样的。现在B中断来了,系统跳interrupt去执行中断响应程序,进入响应程序后先判断一下看看是哪个中断源,再跳转到if(B)。中断B的响应程序执行过程中,A中断来了。因为A的优先级比较高,就发生了中断嵌套,系统再次进入interrupt,一开始同样是先判断一下是哪个中断源,而后就跳转到if(A)下面执行。A的响应程序执行完了,系统就跳到当时B正在执行的那个断点继续执行。最后结束中断响应过程。


而对于使用独立中断服务程序的中断源来说,嵌套是发生在不同的中断响应程序之间的。而使用相同中断响应程序的中断嵌套则是在同一个响应程序中完成,并且每一次进入响应程序都需要判断是哪一个中断源。而且在中断响应程序中,如果需要用到某些变量的话,每一个中断源的分支就应该给不同的变量。比如上面的B中断响应里有一个参数i,A中断响应里面也有i并且对i进行了操作,等A响应完,回到之前的B中断响应里面,i的值就被修改了。这样就有可能会出错了。

请问我上面描述的有没有什么问题,要是有问题的话请告诉我,谢谢
沙发
皈依| | 2015-7-29 16:36 | 只看该作者
太极端了。。
这种情况在程序设计的时候就要考虑到,尽量避免

使用特权

评论回复
板凳
稳稳の幸福| | 2015-7-29 16:40 | 只看该作者
这种情况打死你,你都没见到过了,楼主不要钻牛角尖,就算再那个啥,也有个先来后到,跟受精过程一样。

使用特权

评论回复
地板
ilovezeno| | 2015-7-29 18:09 | 只看该作者
只要你的响应函数本身是可重入的,那又有啥关系

使用特权

评论回复
5
李富贵| | 2015-7-29 19:31 | 只看该作者
ilovezeno 发表于 2015-7-29 18:09
只要你的响应函数本身是可重入的,那又有啥关系

可重入只能保证如果撸主说的那个i是中断函数非静态局部变量的情况下不会出问题,但是如果i是全局变量,用于跟主程序通讯,就会出现不知道被哪个中断修改了i的值得问题。

使用特权

评论回复
6
amanda_s| | 2015-7-30 12:14 | 只看该作者
想问为什么两个中断要用一个中断处理程序呢?
有什么特殊的需求吗?

使用特权

评论回复
7
caihongdiao| | 2015-7-31 21:09 | 只看该作者
这种程序操作全局变量根本无解,就如同程序跑飞一样,在编程中要避免的问题。

使用特权

评论回复
8
neaphy| | 2015-7-31 21:54 | 只看该作者
这种情况很常见

1,上面有人说了,保证服务程序可重入即可,服务程序中不要有静态变量或者全局变量

2,如果做不到可重入,做好保护即可,访问公共资源关中断,访问后开中断,注意关中断时间,确保中断响应时间。

使用特权

评论回复
9
970253146|  楼主 | 2015-8-1 19:18 | 只看该作者
amanda_s 发表于 2015-7-30 12:14
想问为什么两个中断要用一个中断处理程序呢?
有什么特殊的需求吗?

不是我想这样的,是stm32资料上写着有几个外部中断中共用一个中断函数的,具体是哪几个我忘记了。对不

使用特权

评论回复
10
970253146|  楼主 | 2015-8-1 19:22 | 只看该作者
皈依 发表于 2015-7-29 16:36
太极端了。。
这种情况在程序设计的时候就要考虑到,尽量避免

stm32资料上写的,EXTI5~9和EXTU10~15分别共用一个中断向量。也就是这里面哪一个中断的产生进入的都是同一个服务程序。

使用特权

评论回复
11
970253146|  楼主 | 2015-8-1 19:23 | 只看该作者
稳稳の幸福 发表于 2015-7-29 16:40
这种情况打死你,你都没见到过了,楼主不要钻牛角尖,就算再那个啥,也有个先来后到,跟受精过程一样。 ...

EXTI5~9和EXTU10~15分别共用一个中断向量。也就是这里面哪一个中断的产生进入的都是同一个服务程序。那比如说exit5和exit6发生中断嵌套的时候,嵌套是发生在同一段程序上的。是吗?

使用特权

评论回复
12
970253146|  楼主 | 2015-8-1 19:25 | 只看该作者
amanda_s 发表于 2015-7-30 12:14
想问为什么两个中断要用一个中断处理程序呢?
有什么特殊的需求吗?

EXTI5~9和EXTU10~15分别共用一个中断向量。也就是这里面哪一个中断的产生进入的都是同一个服务程序。那比如说exit5和exit6发生中断嵌套的时候,嵌套是发生在同一段程序上的。一般来说中断嵌套是两端不同的中断服务程序之间发生嵌套的嘛,但共用一个中断函数的话,嵌套就是发生在同一个中断服务函数上了。因此我有点不解

使用特权

评论回复
13
970253146|  楼主 | 2015-8-1 19:27 | 只看该作者
neaphy 发表于 2015-7-31 21:54
这种情况很常见

1,上面有人说了,保证服务程序可重入即可,服务程序中不要有静态变量或者全局变量

您好,这里exit5-9共用一个中断响应程序,那exit5-9之间发生中断嵌套的时候,系统就会重复进入这个中断响应程序,这就所谓的重入。。是这样理解吗?本人初学

使用特权

评论回复
14
皈依| | 2015-8-1 19:57 | 只看该作者
本帖最后由 皈依 于 2015-8-1 19:58 编辑
970253146 发表于 2015-8-1 19:22
stm32资料上写的,EXTI5~9和EXTU10~15分别共用一个中断向量。也就是这里面哪一个中断的产生进入的都是同 ...

对的 是这样的 所以设计的时候要避免~中断用1~4的 或者15之后的 这两个区间只各用1个
另外你在多个中断中修改同一个全局变量要特别注意程序的写法 小心程序出问题

使用特权

评论回复
15
加油吧小鱼儿| | 2015-8-2 15:32 | 只看该作者
赶脚好复杂啊~,目前还没这么搞过

使用特权

评论回复
16
amanda_s| | 2015-8-3 16:40 | 只看该作者
970253146 发表于 2015-8-1 19:25
EXTI5~9和EXTU10~15分别共用一个中断向量。也就是这里面哪一个中断的产生进入的都是同一个服务程序。那比 ...

对于EXTI5~9来说,它在中断向量表里就是一个入口,你设置优先级也是一个,不可能EXTI5设一个优先级,EXTI9设一个优先级。所以也不存在抢占啊。

使用特权

评论回复
17
mumu3013| | 2015-8-3 17:21 | 只看该作者
amanda_s 发表于 2015-8-3 16:40
对于EXTI5~9来说,它在中断向量表里就是一个入口,你设置优先级也是一个,不可能EXTI5设一个优先级,EXTI ...

对的,一个中断向量入口,优先级一样,楼主的问题就不存在了

使用特权

评论回复
18
冰河w| | 2015-8-3 21:55 | 只看该作者
EXTI5~9和EXTU10~15分别共用一个中断向量

使用特权

评论回复
19
FireRiver9| | 2015-8-3 21:57 | 只看该作者
嵌套是发生在不同的中断响应程序之间的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

93

主题

289

帖子

5

粉丝