打印
[AVR单片机]

avr 的中断不太方便,请大家讨论一下.

[复制链接]
7474|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
szled|  楼主 | 2007-3-23 21:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ayb_ice| | 2007-3-24 07:58 | 只看该作者

随便说说

  中断嵌套不方便,但还是可以做的,很多RISC都是类似的.

使用特权

评论回复
板凳
AA_55| | 2007-3-24 09:21 | 只看该作者

脑海里面还是CISC那种思想

在计算机发展早期,计算机处理速度比较慢,在多个中断发生时候来不及一一立刻响应,所以才发展出来中断优先级这个概念,以便根据轻重缓急情况分别处理。现在的RISC响应速度很快,不再需要这种机制了,完全可以快速处理一个中断后马上再去处理另一个中断。另外一个原因是,中断优先级逻辑实现,要占用很多硬件布线资源的,这违背了RISC的初衷,RISC用更快的指令执行实现功能,而不是依赖硬件去处理。

以前看到一个贴子,楼主在AVR上用中断方式对一系列脉冲进行计数,发现计数得到的数值总是比真正的数值多几倍。其他人提醒注意脉冲上升沿抖动可能导致多计数,他说这种情况不可能发生,相同的外围硬件电路,在用51上用同样的代码实现相同的功能,都没有发现过这种情况,一度怀疑avr芯片有bug。

后来楼主用去抖动延迟的方法解决了问题,但是还是百思不得其解。后来借到了一个高速示波器,发现脉冲边沿的确有很多us级别的毛刺,才确信是毛刺导致了avr多计数。

这个贴子的楼主就忽视了一个问题:avr处理中断比51快得多。同样的电路用51去做,这些us级别的毛刺持续时间和51响应时间比起来要短的多,所以51不会对这些毛刺进行响应,就等于自动过滤掉了毛刺。而用在avr上,几个us足够让12M时钟的avr跑上几十条指令了,完成一次计数很容易,所以出现了多计数的现象。漏主用了延迟,实际上就降低了中断响应的敏感程度,计数值也就恢复正常了。这个例子说明,快的中断响应,可以令原来必须靠硬件支持的处理,转移到完全软件处理上。

对于技术创新,一定要用发展的眼光看问题,不能用老框子去套新事物。其实这种去掉中断优先级,改为软件支持快速中断响应的例子,在计算机发展史上有个专门的术语:硬件软化。因为软件技术进步了,或者软件执行更快了、处理能力更强了,原来的一些硬件功能就可以交给软件去实现了。对应的还有一个术语:软件硬化。是说由于硬件发展了,能力提高了,成本下降了,原来由软件来做的事情改成硬件来做。而且这种软件硬化、硬件软化还可能随着技术进步交替出现。

例如用pc看视频,早期pc比较慢,所以有了解压缩卡来实现回放。后来pc能力迅速提高,用软件都能完成了,这种解压缩卡就消失了,这就是硬件软化。现在,视频发展到了HDTV,pc软件处理能力处理不了这样的高清晰图像,所以显卡内部视频硬解压功能又出现了,软件又硬化了。不过最近处理器能力提升,这个视频解压缩又有转回软件的迹象,会再次出现硬件软化。

使用特权

评论回复
地板
AA_55| | 2007-3-24 10:12 | 只看该作者

中断嵌套不是必须的

在单片机中,我是从来不使用中断嵌套的。原因很简单,开销大。仔细想想,真的有什么冗长的工作必须在中断中实现吗?那说明你的设计不合理。比如初学者经常见到的一种情况,是处理键盘中断,在中断里面调用软件延时。如果这样,不嵌套就真的不行,可是合格的工程师都明白,怎么能在中断中调用软件延时呢?这只是个极端例子,说明如果设计不当,什么情况都会发生。

使用特权

评论回复
5
AA_55| | 2007-3-24 10:30 | 只看该作者

如果在单片机上真的对抢夺中断非常重要

那可以考虑扩展外接的中断控制器,这些控制器是异步逻辑的,对中断响应不是内部的期间能比的。因为单片机基本上是靠时钟周期采样来识别中断的,这样两次中断响应之间至少有一个时钟的间隙。如果中断信号很短促,就容易被漏掉,51,avr,arm都存在这个问题。这时候,什么嵌套、优先级统统不管用了,只能靠外接器件实现。

我曾开发过一个实时显示翻译系统,模拟一个LCD接口,截获主控处理器发送过来的英文显示信息,翻译成中文。为了确保互锁,我用了CPLD来设计了一个接口,只要主控E信号一变化立即锁定接口并缓冲数据,然后再发中断给单片机来处理。如果这个功能用纯中断来实现,是做不到可靠的实时响应的,不管单片机有多高级的中断处理能力。

使用特权

评论回复
6
ayb_ice| | 2007-3-24 10:44 | 只看该作者

随便说说

  RTOS的重要性...

使用特权

评论回复
7
qjy_dali| | 2007-3-24 13:09 | 只看该作者

AVR的中断方式很适合实现“顶半与底半”机制

其实个人感觉还是LZ的思维问题。各有千秋而已。

使用特权

评论回复
8
naofei67| | 2007-3-25 12:09 | 只看该作者

不同意6楼部分意见

   -- 如果中断信号很短促,就容易被漏掉,51,avr,arm都存在这个问题。

 如果出现这类毛刺级别的信号需要勉强软件来处理,那是硬件设计的问题。把毛刺展宽或者别的代替处理方案非常多。


  另外定时要求比较严的应用,考虑到成本因素非要软件处理的话,中断嵌套还是要的,那就不要用不支持中断嵌套(或者优先级)的芯片方案。

使用特权

评论回复
9
AA_55| | 2007-3-25 15:37 | 只看该作者

楼上说的和我说的没什么区别

我不知道你不同意我什么?我没有说这么快的器件要用单片机内部中断来处理吧?
我用CPLD来处理显示接口,就是因为单片机的中断对于这种快速信号难于响应。

至于中断嵌套,那时仁者见仁智者见智。定时严格应用指的是什么?软件没有这么说的,都说实时性要求强的,因为软件这东西本质上就是慢的。再快的软件也没有硬件快。实时性要求要看你应用系统的要求,没有哪个系统要求是无限快的。一个汽车电子系统,控制打开车防盗锁的软件,响应速度到1s就可以了,如果是安全气囊弹射,1s的话要死人的。

我们现在说的是avr,不要说什么换芯片不换芯片。avr显然不能用于雷达信号处理,但是对于avr的应用领域,不使用中断优先级或者中断嵌套,是有它自己的道理的,因为它的能力足够逐一处理中断。

使用特权

评论回复
10
John_Lee| | 2007-3-26 23:22 | 只看该作者

支持AA_55

使用特权

评论回复
11
mmcu| | 2007-3-27 09:19 | 只看该作者

AA_55在给入门者洗脑,请虚心学习!

使用特权

评论回复
12
ayb_ice| | 2007-3-27 09:48 | 只看该作者

再说说

  AVR不支持中断嵌套是因为他是RISC,与其它无关...

使用特权

评论回复
13
maychang| | 2007-3-28 00:14 | 只看该作者

AA_55 说得不错

这里还有一个习惯问题。用惯了51的中断优先级,改AVR感觉不方便。但这种习惯并不好,思维惯性往往阻碍技术进步。

使用特权

评论回复
14
fsclub| | 2007-3-28 20:12 | 只看该作者

我没用过51,我用过PIC,都是RISC

我就觉得这种中断很好,很快.但用起来得注意方法,那就是中断中尽量少处理事情,一般就是读读标志,其余的交给主程序来做,基本就可以做到哪个中断反应了就处理哪个,处理完了马上退出,确实不能打断的,临时禁止中断,处理完了再允许.
总之,为了快速响应每个中断,中断中尽量少做事,都交到主程序做就对了.

使用特权

评论回复
15
qjy_dali| | 2007-3-29 23:42 | 只看该作者

14楼:思维惯性往往阻碍技术进步

太有哲理了!!!

使用特权

评论回复
16
qjy_dali| | 2007-3-29 23:43 | 只看该作者

maychang的这句话我看足可做技术人员的座右铭了

使用特权

评论回复
17
maychang| | 2007-3-30 09:19 | 只看该作者

qjy_dali 谬奖了!

其实,不仅是技术上,就是科学、经济、政治上,我觉得,思维惯性往往阻碍进步。反过来说,所有进步都是改变了原有的思维而产生的。

使用特权

评论回复
18
ayb_ice| | 2007-3-30 13:23 | 只看该作者

随便说说

  说些费话,51中肯定用中断嵌套...

使用特权

评论回复
19
pheavecn| | 2007-3-30 20:38 | 只看该作者

AVR中断不方便的话,就没有方便的了。

中断标志都不用你清。
中断的分类也很细。

使用特权

评论回复
20
huangqi412| | 2007-4-1 08:57 | 只看该作者

楼上讨论激烈,学习了。

使用特权

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

本版积分规则

6

主题

19

帖子

0

粉丝