OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7874|回复: 14

假如执行一个通信中断时,突然来了一个更高优先级的中断,此时会出现什么情况?

[复制链接]

210

主题

318

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1998
金钱
1998
注册时间
2015-10-27
在线时间
216 小时
发表于 2016-1-13 20:56:41 | 显示全部楼层 |阅读模式
1金钱
原子哥好!        假如有一个通信中断来了,那么利用串口发送一串数据,但是数据刚发出几个,结果突然来了一个更高优先级的一个外部中断,那么此时CPU是继续将当时的数据发完之后再退出通信中断去执行更高先级的外部中断,还是立马停下来,先去把外部中断执行完后再回来接着把剩余的几个没发完的数据再接着发出去?

最佳答案

查看完整内容[请看2#楼]

对于STM32,我们的中断优先级管理内容,手册和视频讲解都很详细。 抢占优先级:控制抢占。也就是打断 响应优先级:控制同时发生谁先响应 如果一个中断A正在执行,那么,如果另一个更高抢占优先级的中断B发生,那么之前的中断A会被打断,优先执行抢占优先级高的B中断。等B结束之后再回过去执行A。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 20:56:42 | 显示全部楼层
对于STM32,我们的中断优先级管理内容,手册和视频讲解都很详细。
抢占优先级:控制抢占。也就是打断
响应优先级:控制同时发生谁先响应

如果一个中断A正在执行,那么,如果另一个更高抢占优先级的中断B发生,那么之前的中断A会被打断,优先执行抢占优先级高的B中断。等B结束之后再回过去执行A。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-1-13 21:23:00 | 显示全部楼层

以前51有“中断嵌套”的机制,可以实现后者。

但现在好像各种CPU、DSP都不再嵌套。
STM32应当是前者,当前执行完成,再去做另一个。


回复

使用道具 举报

210

主题

318

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1998
金钱
1998
注册时间
2015-10-27
在线时间
216 小时
 楼主| 发表于 2016-1-13 21:46:55 | 显示全部楼层
openedvadmin 发表于 2016-1-13 21:40
对于STM32,我们的中断优先级管理内容,手册和视频讲解都很详细。
抢占优先级:控制抢占。也就是打断
响 ...

如果这个通信数据刚发送了一半就被打断了,那么回到该通信中断时,是接着上次没发完的再发还是重新再来一起再发?
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 21:49:29 | 显示全部楼层
有现场保护的。。。所以对于这种,你要设置好优先级。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

210

主题

318

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1998
金钱
1998
注册时间
2015-10-27
在线时间
216 小时
 楼主| 发表于 2016-1-13 22:02:11 | 显示全部楼层
openedvadmin 发表于 2016-1-13 21:49
有现场保护的。。。所以对于这种,你要设置好优先级。。。

有现场保护究竟是会接着上次没发完的数据后再接着发????
---------------------------------还是重新再来从头一个字节开始发??
回复

使用道具 举报

58

主题

6293

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11474
金钱
11474
注册时间
2014-4-1
在线时间
1297 小时
发表于 2016-1-13 22:02:13 | 显示全部楼层
openedvadmin 发表于 2016-1-13 21:40
对于STM32,我们的中断优先级管理内容,手册和视频讲解都很详细。
抢占优先级:控制抢占。也就是打断
响 ...


就是说,有嵌套的概念?


回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 22:03:06 | 显示全部楼层
lili0231 发表于 2016-1-13 14:02
有现场保护究竟是会接着上次没发完的数据后再接着发????
---------------------------------还是重 ...

程序执行到哪里。就从哪里中断。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 22:03:16 | 显示全部楼层
xuande 发表于 2016-1-13 14:02
就是说,有嵌套的概念?

是的。你可以测试一下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 22:04:40 | 显示全部楼层
所以你如果多个中断,你要设置好优先级,考虑好这种可能被打断的情况。。。
并且一般中断里面程序执行时间不宜过长。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

210

主题

318

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1998
金钱
1998
注册时间
2015-10-27
在线时间
216 小时
 楼主| 发表于 2016-1-13 22:07:52 | 显示全部楼层
openedvadmin 发表于 2016-1-13 22:03
程序执行到哪里。就从哪里中断。

那我理解就是接着上次没发完的部分再发出去就行了。之前发出去的就算是发走了,只需要把剩下的发完就完事了???
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 22:12:35 | 显示全部楼层
是的。只要你的处理好。本身就不会太大的问题。共享数据处理好。。。。比如说:你定义了一个全局变量,你在某个中断A里面改了这个全局变量的值。但是你在更高优先级的中断B里面又要去判断。。这样就会导致混乱。。
处理好一些共享数据。然后中断时间不要执行太长即可。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

306

主题

1426

帖子

12

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
7871
金钱
7871
注册时间
2015-10-15
在线时间
2874 小时
发表于 2016-1-13 22:15:03 | 显示全部楼层
其实这个东西不难测试了。
你弄一个中断A,发送数据。中断B用按键触发,中断B你把时间设置长一点,等A中断执行的时候触发B中断,再去看看过程即可知道。。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1681
金钱
1681
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-13 22:23:10 | 显示全部楼层
用了这么久的单片机还真没想过这个问题
回复

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-12-31
在线时间
15 小时
发表于 2016-1-14 08:31:30 | 显示全部楼层
openedvadmin 发表于 2016-1-13 22:15
其实这个东西不难测试了。
你弄一个中断A,发送数据。中断B用按键触发,中断B你把时间设置长一点,等A中断 ...

好方法!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 00:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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