[PIC®/AVR®/dsPIC®产品] release下进不了CN中断

[复制链接]
1953|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程序,此时编译后再下载到芯片就有可能出现你的这个现象。

还有很多可能。
 楼主| 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下不行
 楼主| m1a1ha 发表于 2014-10-10 13:55 | 显示全部楼层
yewuyi 发表于 2014-10-10 11:35
不奇怪,一般都是错误的程序代码写法造成的。

例如:

我用pickit3调试
 楼主| m1a1ha 发表于 2014-10-13 20:28 | 显示全部楼层
yewuyi 发表于 2014-10-10 11:35
不奇怪,一般都是错误的程序代码写法造成的。

例如:

dsPIC中没有GIE
 楼主| m1a1ha 发表于 2014-10-14 09:25 | 显示全部楼层
release下其他中断都没问题,唯独进不了电平变化中断
yewuyi 发表于 2014-10-14 11:50 | 显示全部楼层
m1a1ha 发表于 2014-10-13 20:28
dsPIC中没有GIE

我只是举了一个可能的例子,并不是告诉你:你就犯了等同这个举例的错误。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

69

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部