|
发表于 2007-6-30 01:05:21
|
显示全部楼层
1。"如果用c语言的话是否顺序(1)、(7)和(8)均可省略呢?还有顺序(4)B中断服务,是指中断后的相关处理程序吗?"
答:使用C语言的话,(1)(7)(8)可以省掉,因为C语言的环境本身已经处理了这3个功能。而(4)就是指中断B本身的中断服务程序。
2。".......这样一来是否会造成我定时中断响应的不准确呢?"
答:这个问题应该这样分析:
a)timer3是1ms一次。如果你的uart0中断服务加上timer3的中断服务程序执行时间小与1ms,则不会造成定时中断的响应的不准确,只是当有uart0产生是,本次time3的中断服务会拖后一点时间。
b)但当uart0中断申请稍微早于timer3的中断,或与time3的中断申请同时产生的话,time3的中断申请准确,但响应本次time3中断的时间要延后。
c)我已经讲过,中断服务程序的编写原则之一是“中断服务程序的执行时间仅可能的短”!
你的time3是1ms一次,但如果time3服务程序执行的时间>1ms的话,就是没有中断嵌套,你的time3响应也不准确了。
3)不管使用任何的语言,在中断处理过程的一开始加cli();在最末尾加sei()都是没有必要的。因为AVR的硬件已经自动处理了这些功能。加上这些语句,增加了中断服务程序的执行时间,反而有害。
4)“我在timer3的溢出中断响应处理中,去掉了cli()和sei()。这样就可以使即便程序正在运行在timer3的中断响应中,这时如果有uart0的中断来,就会先去执行uart0的中断。 ”
答:如果在你的系统中只使用了2个中断,这个说法是正确的。但系统中有3个以上的中断,那么在time3中断程序的执行过程中,任何其它的中断申请产生,都将会打断time3的中断。 |
|