qq525699564 发表于 2014-2-1 19:35:26

正在读 马潮 老师的AVR,遇到一些问题想在请教各位

中断那一章有点疑问

首先 中断的时候要保护现场这个现场我想象不出来是什么除了 SREG 还需要保存其他东西了吗?


其次 关于中断还有一个问题

程序运行到中断向量函数中的时候(例如串口中断) 全局变量 I 自动被清0,此时我重新打开为1 然后在此中断函数中等待串口再次中断? 可以吗?

举个例子



Ustar_RS_chose()
{
uchar a;

chose=0;
ack=1;

for(a=0;a<8;a++)
{

while(ack)
{
send_byte(date);
RX_complete=1;
SEI;
while(RX_complete);
}


}

}




#pragma interrupt_handlerRX_over:12///接受中断



void RX_over()
{

RX_complete=0; //   (为全局变量)

if(chose)                   //   (chose为全局变量)
Ustar_RS_chose();
else
ack=UDR;// ack为全局变量)



}


这函数在中断第一次后进入发送函数开始发送数据,但在向量子函数中 等待主机回答开了中断,请问能否实现? 这样在中断向量函数中调用的子函数 算中断函数吗? 有点搞不懂 求指点

sync765 发表于 2014-2-2 00:15:53

楼主没接触过汇编
进入中断前除了要保存当前程序指针外,还要保存临时寄存器里的值,这些内容都要入栈
退出中断时,恢复临时寄存器值,以及程序指针,这叫出栈
如果中断嵌套过多,会导致栈的溢出,程序就会出现运行错误!
在程序设计中,是要避免在同一中断中再次进出中断的,无限制的嵌套必然导致程序运行混乱

prince2010 发表于 2014-2-3 09:57:02

STM出来基本上就放弃AVR了.......

磊磊映画 发表于 2014-2-8 13:22:54

sync765 发表于 2014-2-2 00:15
楼主没接触过汇编
进入中断前除了要保存当前程序指针外,还要保存临时寄存器里的值,这些内容都要入栈
退出 ...

51就没怎么接触                      c语言中由编译器自动编译不需要人工加上保护现场了用到的变量自动保护了

磊磊映画 发表于 2014-2-8 13:23:33

prince2010 发表于 2014-2-3 09:57
STM出来基本上就放弃AVR了.......

还有用avr开发产品的呢
页: [1]
查看完整版本: 正在读 马潮 老师的AVR,遇到一些问题想在请教各位