打印
[PIC®/AVR®/dsPIC®产品]

release下进不了CN中断

[复制链接]
1645|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
m1a1ha|  楼主 | 2014-9-29 17:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 m1a1ha 于 2014-10-9 16:46 编辑

很奇怪的问题。
debug下,RUN,程序正常运行,正常输出。
但release下下载程序后,却进不了中断,中断中的语句没有执行。
沙发
m1a1ha|  楼主 | 2014-10-8 08:53 | 只看该作者
很奇怪啊

使用特权

评论回复
板凳
m1a1ha|  楼主 | 2014-10-9 15:29 | 只看该作者
外部中断可以,CN中断却不行

使用特权

评论回复
地板
yewuyi| | 2014-10-10 11:35 | 只看该作者
不奇怪,一般都是错误的程序代码写法造成的。

例如:
因为ICD调试时需要使用到中断资源,所以编译器会自动插入打开GIE标志的代码,但用户的程序中自己并没有写这个,如果用户程序中使用了中断,但使用release模式编译时,会删除掉那个自动插入的打开GIE程序,此时编译后再下载到芯片就有可能出现你的这个现象。

还有很多可能。

使用特权

评论回复
5
m1a1ha|  楼主 | 2014-10-10 13:41 | 只看该作者
yewuyi 发表于 2014-10-10 11:35
不奇怪,一般都是错误的程序代码写法造成的。

例如:

//********************CN初始化函数*************************//
void intCN()//RB0为CN输入
{
  TRISBbits.TRISB0=1;
  CNEN1bits.CN2IE=1;//RB0为CN2
  IEC1bits.CNIE=1;
  IFS1bits.CNIF=0;
  IPC4=0x5000;//电平变化中断优先级
}


//********************CN中断函数*************************//
void __attribute__((__interrupt__,auto_psv)) _CNInterrupt(void)
{  
  //if(PORTBbits.RB0)
     IEC0bits.T1IE=1;//启动定时器
   IFS1bits.CNIF=0;//中断标志位清零
     LATA=0XFFFF;
}


这是CN中断的两个相关函数。没什么错啊,为什么debug下可以,release下不行

使用特权

评论回复
6
m1a1ha|  楼主 | 2014-10-10 13:55 | 只看该作者
yewuyi 发表于 2014-10-10 11:35
不奇怪,一般都是错误的程序代码写法造成的。

例如:

我用pickit3调试

使用特权

评论回复
7
m1a1ha|  楼主 | 2014-10-13 20:28 | 只看该作者
yewuyi 发表于 2014-10-10 11:35
不奇怪,一般都是错误的程序代码写法造成的。

例如:

dsPIC中没有GIE

使用特权

评论回复
8
m1a1ha|  楼主 | 2014-10-14 09:25 | 只看该作者
release下其他中断都没问题,唯独进不了电平变化中断

使用特权

评论回复
9
yewuyi| | 2014-10-14 11:50 | 只看该作者
m1a1ha 发表于 2014-10-13 20:28
dsPIC中没有GIE

我只是举了一个可能的例子,并不是告诉你:你就犯了等同这个举例的错误。

使用特权

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

本版积分规则

27

主题

69

帖子

0

粉丝