打印

中断函数为什么不能长?

[复制链接]
楼主: areshan
手机看帖
扫描二维码
随时随地手机跟帖
21
mqp108| | 2010-6-25 21:15 | 只看该作者 回帖奖励 |倒序浏览
学习

使用特权

评论回复
22
highgear| | 2010-6-25 21:22 | 只看该作者
中断时间不能太长是一个为命题。我猜想产生这一问题的主要原因是:
1) 对于软硬件结构的理解不够深入, 例如对于堆栈操纵,中断操控/跳转/返回。
2) 51的中断设计先天不足. 不像其他cpu可以任意设置优先级,有专门的DI/EI (Disable/Enable Interrupt), 等等。
3) 担心中断干扰主程序。
.
.
第二点导致51中断程序内无法响应同级中断, 同时又不会使用堆栈操纵中断操控, 所以必须简短以及时开放中断。
.
.
当然, 如果不会使用堆栈操纵中断操控或者没有信心控制操纵, 还是把中断函数写的短一些吧。

使用特权

评论回复
23
ayb_ice| | 2010-6-26 08:13 | 只看该作者
中断时间不能太长是一个为命题。我猜想产生这一问题的主要原因是:
1) 对于软硬件结构的理解不够深入, 例如对于堆栈操纵,中断操控/跳转/返回。
2) 51的中断设计先天不足. 不像其他cpu可以任意设置优先级,有专门的 ...
highgear 发表于 2010-6-25 21:22


请问LS
其它什么MCU可以任意设优先级?
那些都是软件控制的优先级<典型的只能响应一个中断,因为中断中会关掉中断使能>,那是简化的中断结构,操作多有不变
51是硬件的优先级,51也可以那样工作
...

使用特权

评论回复
24
tcc8073| | 2010-6-26 08:17 | 只看该作者
我曾经设计过一个无线遥控控制可控制硅的东西,首先是需要检测100HZ的交流电频率,在10MS内还需要检测遥控信号,控制可控硅,键盘输入,并对相关的动作做出判断;在这个程序中我使用的是中断嵌套,把无线遥控作为第一优先级,再在10MS内检测键盘和做相关处理,整个程序做下来感觉是需要合理设置和安排每个子程序的工作,最重要的是做好各个阶段状态的保护,特别需要关注细节.

使用特权

评论回复
25
a89982715| | 2010-6-26 09:04 | 只看该作者
你想想如果中断处理的时间太长了,比如很长很长,长的第二个中断就接受不到了,是否系统会出问题?
acute1110 发表于 2010-6-23 15:49

那你是否要把程序都写在中断函数了算了:lol

使用特权

评论回复
26
ZRL700424| | 2010-6-26 11:28 | 只看该作者
本帖最后由 ZRL700424 于 2010-6-26 11:33 编辑

比如你是一个作家,每天在家里埋头写作(主程序),偶尔会接一下电话(中断),如果中断时间太长的话(煲电话粥),就会有什么问题呢,1,通知你去领稿费的电话总是打不进来;2,你女朋友在车站等了2个小时了,打电话要你去接,却总是忙音;3,因为不断的接电话,而且每次电话时间又长,导致本来2天就能写完的**你却要用半个月才能完成;……

使用特权

评论回复
27
maxking| | 2010-6-26 12:54 | 只看该作者
要具体问题具体分析。当只有一个中断的时候,爱怎么长就怎么长。

使用特权

评论回复
28
datouyuan| | 2010-6-26 14:54 | 只看该作者
26楼: 本帖最后由 ZRL700424 于 2010-6-26 11:33 编辑

比如你是一个作家,每天在家里埋头写作(主程序),偶尔会接一下电话(中断),如果中断时间太长的话(煲电话粥),就会有什么问题呢,1,通知你去领稿费的电话总是打不进来;2,你女朋友在车站等了2个小时了,打电话要你去接,却总是忙音;3,因为不断的接电话,而且每次电话时间又长,导致本来2天就能写完的**你却要用半个月才能完成;……


26楼说得太形象了。

使用特权

评论回复
29
xiaoma1110| | 2010-6-26 19:12 | 只看该作者
不错的东东

使用特权

评论回复
30
foxqiu| | 2010-6-27 13:36 | 只看该作者
呵呵,实际问题,实际考虑,没有绝对,中断时间在一般情况下应该短,这是经验。

使用特权

评论回复
31
原野之狼| | 2010-6-28 11:52 | 只看该作者
别人说的不一定是对的 还是需要自己仔细琢磨下 显然中断时间长跟数据溢出没有关系 5# areshan

使用特权

评论回复
32
ttxx3588679| | 2010-6-28 12:21 | 只看该作者
程序容易死

使用特权

评论回复
33
calloy| | 2010-6-28 13:00 | 只看该作者
这个我认为应该更具你实际的系统来确定中断函数的长短吧。比如有些中断要处理的事儿就很多,这个就必须要长,在这个过程中出现的中断嵌套可以使用相关技术尽量去屏蔽。但是有一个前提是,能短就尽量短。毕竟中断是警急服务。不是主要工作。

使用特权

评论回复
34
yifandou| | 2010-6-28 17:57 | 只看该作者
是的,有些时间的问题不容易掌控

使用特权

评论回复
35
xlsbz| | 2010-6-28 19:06 | 只看该作者
要具体问题具体分析。当只有一个中断的时候,爱怎么长就怎么长。
maxking 发表于 2010-6-26 12:54

要养成好习惯啊!

使用特权

评论回复
36
xlsbz| | 2010-6-28 19:07 | 只看该作者
比如你是一个作家,每天在家里埋头写作(主程序),偶尔会接一下电话(中断),如果中断时间太长的话(煲电话粥),就会有什么问题呢,1,通知你去领稿费的电话总是打不进来;2,你女朋友在车站等了2个小时了,打电话 ...
ZRL700424 发表于 2010-6-26 11:28


更可怕的是  这个女朋友可能吹了!尽管可以再找一个!

使用特权

评论回复
37
highgear| | 2010-6-28 20:55 | 只看该作者
26搂的例子恰恰说明了 51 的中断窘境:如果不挂断( reti )座机电话, 你的手机就不会响。
其他cpu(Intel x86 8259A, Motorola microchip 等) 可以有或者可以设置多级优先, 或者是可以立即开放中断(不同于51, 只有reti才可以开放中断), 这样可以保证座机不挂断的情况下, 手机也会响。

使用特权

评论回复
38
mohanwei| | 2010-6-28 21:08 | 只看该作者
51没有这种说法吧……
例:低优先级定时器中断正在处理的时候,如果来了个高优先级的串口中断,照样可以把定时器中断先挂起的。
一些扩展的51,例如NXP的,还可以有4个优先级别……

使用特权

评论回复
39
HWM| | 2010-6-28 21:10 | 只看该作者
中断时间是否长的问题要看具体情况。如果中断的是个不宜长时间等待的任务(主程序或中断服务程序),那中断时间长了自然是个问题。但如果是个事件触发式系统,主程序初始化后就立刻进入到空循环(或睡眠状态),事件的触发和服务都是由中断服务程序完成。在此情形下,中断时间的长短将如何评判呢?

使用特权

评论回复
40
highgear| | 2010-6-28 22:18 | 只看该作者
38楼: 51只有2级优先, 高优先级的中断不返回, 第二个或最多第三个中断就无法响应。
赞同39搂, 中断时间长短还与软件设计结构相关, 不同的结构有不同的中断处理策略。

使用特权

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

本版积分规则