首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

中断返回怎么指向非默认的位置[求助]

中断返回怎么指向非默认的位置[求助]

interrupt 2 void Timer(void) {
T1SC;                     
T1SC=0x70;                  
/*中断其他处理*/}
默认的返回位置因该是发生中断的位置,现在我想指定另外一个返回位置代替默认发生中断的地址,应怎么写呢?
请大家帮帮忙,
可以修改堆栈中的返回地址。
但是为什么要这样做呢?
海纳百川  有容乃大
因为我的程序流程是遇到中断说明数据接收超时,丢弃剩下数据,跳转到刚开始接收数据帧的位置重新接收。怎么实现呀?
在主程序的框架中,应该考虑到出现各种情况的可能性。出现某种中断后,主程序应该,也必须在中断处继续运行,而不是人为地转变运行轨道。
例如你的情况,如果出现接收超时中断,可以在中断中停止接收,再将接收的初始化工作交给主程序做。如果需要立即重新开始接收,那么可以在超时中断中进行初始化的工作,然后返回主程序继续运行并等待接收中断。
海纳百川  有容乃大
请问bqyjqj你是怎样处理的?我的处理方法类似于strongchen说得那样,中断设断点调试运行可以,不设断点全速运行程序就出错了
作个朋友
改变中断的返回地址?不好把。我觉得一个方法,大家都默认了的,肯定有它的道理,比如中断返回后就是默认的原中断发生处继续运行,你强行改变地址,好像违背了常规的做法。你的问题肯定用别的方法可以解决的。
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
用别的方法是可以,但是中断设断点调试运行可以,不设断点全速运行程序就出错了。。。
作个朋友
希望大家指点一下,
作个朋友
代码贴出来看看
static void init_timer(void) { //ʹÓÃÍⲿÖжϣ¬ÒªÏû¶¶£¡£¡£¡£¡
  DisableInterrupts          //¹ØÖжÏ
  
  TSC = 0x70;       //ÔÊÐíÖжϣ¬Í£Ö¹¼ÆÊý£¬¼ÆÊýÆ÷¸´Î»
  TMODH = 153;                                                        //8ms²úÉúÒ»´ÎÒç³öÖжÏ
  TMODL = 153;
  
  EnableInterrupts;         //¿ªÖжÏ
}

void interrupt 6 overflow_isr(void) {
TSC = 0x70;     //ÇåÖжϱêÖ¾

byte_counter = 0;            
romeoDriverState = ROMEO_READY;
semaphore = 1;
}
作个朋友
我在程序里循环检测semaphore是否为1,为1则跳转到自己想要达到的地址。
并且每次进中断,定时器计数器并没有运行到预设的值
作个朋友
设置断点正确,全速不行得话,是不是COP没有关闭的原因啊!
不断学习,摸索中进步!
cop关掉了
不知道原因
作个朋友
不太清楚libingqiang的问题,怎么叫设置断点正确,而全速运行不行呢?
海纳百川  有容乃大
是这样的:
我接收数据,如果进定时器溢出中断表明接收超时,需要下次重新接收。
现在在中断内部设置断点,全速运行,当接收数据错误时进入中断。这时再次全速运行,接收错误再进中断。。。。。。。。。

但是我如果不在中断内部设置断点,全速运行,就会一直进中断。(我在中断内设置了点亮led用于测试,led一直亮)
作个朋友
返回列表