搜索
bottom↓
回复: 26

中断函数执行时间大于中断触法时间会怎样

[复制链接]

出0入0汤圆

发表于 2013-10-9 14:52:59 | 显示全部楼层 |阅读模式
中断函数执行时间大于中断触法时间会怎样

问下单片机的第一个T0中断处理函数没有处理完,第二个T0中断时间又到了,会怎样  是等第一个T0处理完成在处理第二个,还是第二个就不再处理了

都是T0中断所以没有中断优先级这一说,望知道的说说看,在调试程序,可是没有仿真器,不知道程序运行的时间,  

顺便问下怎么能知道STC12C5628AD运行的时间呢,据说keil仿真的时间不对,因为STC12C5628AD是1T的单片机,很纠结,用什么仿真可以呢,上次一哥们说TKStudio可以,但是弄了半天不回用,好纠结

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-10-9 15:08:45 | 显示全部楼层
顶一顶,这个我也想知道的

出0入0汤圆

 楼主| 发表于 2013-10-9 15:10:05 | 显示全部楼层
kktop 发表于 2013-10-9 15:08
顶一顶,这个我也想知道的

我更想知道这是为什么  好纠结的说

出0入0汤圆

发表于 2013-10-9 15:21:28 | 显示全部楼层
进入中断后,先关掉这个中断,再处理.
若不关,这个中断再次发生,程序还执行尚没完成的中断.退出时只要没清中断标志,它会马上又进入中断.

出0入0汤圆

 楼主| 发表于 2013-10-9 15:24:04 | 显示全部楼层
Firman 发表于 2013-10-9 15:21
进入中断后,先关掉这个中断,再处理.
若不关,这个中断再次发生,程序还执行尚没完成的中断.退出时只要没清中 ...

中断标志不都是进入中断函数自动清除的么?

出0入0汤圆

发表于 2013-10-9 15:25:42 | 显示全部楼层
重复进入中断              

出0入0汤圆

发表于 2013-10-9 15:28:11 | 显示全部楼层
一般来说 中断处理应该短小精悍。不同的MCU对中断的处理有些不同,有的不允许中断嵌套,而有的可以。      

出0入0汤圆

发表于 2013-10-9 15:31:31 | 显示全部楼层
金牛AKI 发表于 2013-10-9 15:24
中断标志不都是进入中断函数自动清除的么?

清除标志位和关中断是两个完全不同的事件

出0入0汤圆

发表于 2013-10-9 15:32:44 | 显示全部楼层
金牛AKI 发表于 2013-10-9 15:24
中断标志不都是进入中断函数自动清除的么?

有些中断是硬件清除,不过软件也能清除的.
就是进入中断已经清除,可你在处理中断时又触发了同一个中断,它的中断标志不是又有了吗?

出0入0汤圆

发表于 2013-10-9 15:34:03 | 显示全部楼层
二进制 发表于 2013-10-9 15:25
重复进入中断

有些MCU是不支持中断重入的.

出0入0汤圆

发表于 2013-10-9 15:35:13 | 显示全部楼层
51EDA技术 发表于 2013-10-9 15:28
一般来说 中断处理应该短小精悍。不同的MCU对中断的处理有些不同,有的不允许中断嵌套,而有的可以。       ...

你没见过中断程序长过主程序的,我看到就想哭!

出0入0汤圆

 楼主| 发表于 2013-10-9 15:39:01 | 显示全部楼层
高手好多

出0入9汤圆

发表于 2013-10-9 15:40:16 | 显示全部楼层
中断函数执行时间那么长干嘛啊?
建议进入之后关中断
如果由于程序需要不允许关中断的话,建议增加判断防止中断重入

出0入9汤圆

发表于 2013-10-9 15:43:33 | 显示全部楼层
之前用AVR做一个东西就遇到中断重入的问题
而且还不能关中断
后来在进入中断的时候判断一个标志位
如果没有更改就执行中断程序,否则就直接出中断
中断程序第一行就更改这个标志位
在中断退出的时候把标志位恢复初始设置

出0入0汤圆

 楼主| 发表于 2013-10-9 15:43:50 | 显示全部楼层
istars2005 发表于 2013-10-9 15:40
中断函数执行时间那么长干嘛啊?
建议进入之后关中断
如果由于程序需要不允许关中断的话,建议增加判断防止中 ...

暂停计数可不可以

出0入0汤圆

发表于 2013-10-9 16:12:49 | 显示全部楼层
以实际效果为准,每种单片机的处理机制不同的。

出0入0汤圆

 楼主| 发表于 2013-10-9 16:16:18 | 显示全部楼层
turf456 发表于 2013-10-9 16:12
以实际效果为准,每种单片机的处理机制不同的。

那如果是stc12c5628ad单片机呢

出0入0汤圆

发表于 2013-10-9 16:37:19 | 显示全部楼层
金牛AKI 发表于 2013-10-9 16:16
那如果是stc12c5628ad单片机呢

额,我没试过。

出0入0汤圆

发表于 2013-10-9 16:55:47 | 显示全部楼层
中断堆积么
如果中断处理过程中不禁止中断,则会使函数执行一半被新来的中断打断,最终造成堆栈溢出
如果中断处理过程中禁止中断,则后来的中断无法被执行,直到当前处理结束;结束后根据单片机对中断处理的原理不同,或立即再次执行中断函数,或等下一次中断到来时执行

出0入0汤圆

发表于 2013-10-9 17:01:38 | 显示全部楼层
zhujinliang2124 发表于 2013-10-9 16:55
中断堆积么
如果中断处理过程中不禁止中断,则会使函数执行一半被新来的中断打断,最终造成堆栈溢出
如果中 ...

是的       具体要看所用单片机内核中断机制

出0入0汤圆

 楼主| 发表于 2013-10-9 17:09:01 | 显示全部楼层
leijiayou 发表于 2013-10-9 17:01
是的       具体要看所用单片机内核中断机制

这个不清楚  我用的是STC12C5628AD  不知道中断堆积是怎么处理的

出0入8汤圆

发表于 2013-10-9 17:29:59 | 显示全部楼层
具体的看单片机是否支持中断嵌套。

出0入0汤圆

发表于 2013-10-9 17:37:48 | 显示全部楼层
金牛AKI 发表于 2013-10-9 17:09
这个不清楚  我用的是STC12C5628AD  不知道中断堆积是怎么处理的

STC 同级中断不会被嵌套,只会被更高级的中断嵌套

出0入0汤圆

发表于 2013-10-9 17:41:58 | 显示全部楼层
51的话是第一个T0处理完成再处理第二个,51单片机中断处理时间等于或大于中断间隔时间并不会引起主程序死机。

出0入0汤圆

发表于 2013-10-9 17:42:15 | 显示全部楼层
金牛AKI 发表于 2013-10-9 17:09
这个不清楚  我用的是STC12C5628AD  不知道中断堆积是怎么处理的

如果在中断处理 过程中,又产生同级中断,新产生的中断会在当前处理的中断完成后再执行

出0入0汤圆

发表于 2013-10-18 07:15:24 来自手机 | 显示全部楼层
动手实际测试下

出0入0汤圆

发表于 2013-10-18 08:25:54 | 显示全部楼层
中断函数执行时间大于中断间隔的话,说明设计人员烦了严重错误
中断函数一般设计短小精悍为主要原则

一条路不通,可能通过其他方式来解决,而不是一味钻死胡同
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 12:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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