打印

51串口中断中引入外部中断的问题

[复制链接]
2536|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
eyesmall|  楼主 | 2013-3-27 10:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口中断执行过程中,发生外部中断事件,为什么执行外外部中断后,我的程序回不到串口中断的程序中呢???  只粘贴的主要部分  
IP=0x0F;
void X_baohu(void) interrupt 0
{       
        EX0=0;
        EA=0;
        delay(100);
        X_fangxiang=(!X_fangxiang);
        X_yidong(20);
        X_fangxiang=(!X_fangxiang);
        EX0=1;
        EA=1;       
}
void COM_int(void) interrupt 4
{
        ES=0;
        RI=0;

        if(SBUF==0xFF)                           //运行
        {       
         unsigned char i5=0;
                      X_yidong(dat_XYT[i5++]);
        Y_yidong(dat_XYT[i5++]);       
        }
        ES=1;
}
  当X_yidong(dat_XYT[i5++]);  运行时 引入外部中断 X反向移动一段距离 如能跳回串口中断程序,X应该继续向前才对,可执行完外部中断后   系统就不动了 求解   

相关帖子

沙发
nino_1| | 2013-3-27 11:16 | 只看该作者
实际程序操作仿真时,会跳到何处?

使用特权

评论回复
板凳
ayb_ice| | 2013-3-27 11:34 | 只看该作者
将X_yidong函数内容暂时屏蔽就能判断问题了

多半就是他引起的

使用特权

评论回复
地板
eyesmall|  楼主 | 2013-3-27 13:01 | 只看该作者
ayb_ice 发表于 2013-3-27 11:34
将X_yidong函数内容暂时屏蔽就能判断问题了

多半就是他引起的

谢了  应该是X_yidong()  被两个中断同时引用的原因    复制了一下改了个名字 运行就没问题了  有什么好办法解决这种冲突吗  

使用特权

评论回复
5
ayb_ice| | 2013-3-27 13:31 | 只看该作者
eyesmall 发表于 2013-3-27 13:01
谢了  应该是X_yidong()  被两个中断同时引用的原因    复制了一下改了个名字 运行就没问题了  有什么好 ...

多个进程使用需要重入函数,显然你这个函数不重入,编译应该有警告的

使用特权

评论回复
6
eyesmall|  楼主 | 2013-3-27 14:14 | 只看该作者
ayb_ice 发表于 2013-3-27 13:31
多个进程使用需要重入函数,显然你这个函数不重入,编译应该有警告的

改回来看了下确实有警告,只是报警这东西我一般都不太注意。void X_yidong(unsigned int x);  其中x属于全局变量吗?

使用特权

评论回复
7
ayb_ice| | 2013-3-27 14:18 | 只看该作者
本帖最后由 ayb_ice 于 2013-3-27 14:19 编辑

x不是全局变量,
是函数不重入
一定要确定警告原因,
有些警告确实无所谓,比如某个变量没有使用
有些警告其实是很严重的错误

使用特权

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

本版积分规则

个人签名:新手一个,干嘛嘛不行

10

主题

145

帖子

0

粉丝