| 
 
| PIC18F45K22中断函数里面写数组发生异常用PIC18F45K22做逆变器 xc8编译器,PRO级逆变功能已经做好,添加串口通信程序时发生异常,
 串口接受、发送中断定义为低优先级中断
 逆变相关的 PWM中断和AD中断为高优先级中断
 程序如下。
 把程序中注释的那句打开,输出电压就变成48Hz了,即使不发生串口通信也是一样
 如果把接收缓冲区定义成8bit 的数组,则会出现更多问题
 请教是怎么会事?
 另外发送中断程序中有一个用指针进行处理的也有类似问题
 
 应该是编译链接的过程中发生了什么问题。请指教!
 
 INT16U ucSCIRecBuf[10];
 void sRS232RECCmd(void)
 {
 
 INT16U tmp;
 
 
 tmp = RC1REG;
 
 if(!FERR1)
 
 {
 
 ucSCIRecBuf[ucSCIRecCnt] = tmp;  // 这句打开就出现异常
 
 /*
 
 if(tmp == CHAR_ENTER)
 
 {
 
 tmp = ucSCIRecBuf[0];
 
 if((tmp >= 'A') && (tmp <= 'Z'))
 
 {
 
 switch(ucSCIRecBuf[0])
 
 {
 
 case 'I':
 
 sICommand();
 
 break;
 
 
 case 'F':
 
 sFCommand();
 
 break;
 
 
 case 'Q':
 
 sQCommand();
 
 break;
 
 }
 
 }
 
 ucSCIRecCnt = 0;
 
 }
 
 else
 
 {
 
 if(ucSCIRecCnt > 9)
 
 {
 
 ucSCIRecCnt = 0;
 
 }
 
 ucSCIRecBuf[ucSCIRecCnt] = tmp;
 
 ucSCIRecCnt++;
 
 }
 
 */
 
 TX1IE = 0;
 
 
 }
 
 
 if(OERR1)
 
 {
 
 CREN1 = 0;
 
 CREN1 = 1;
 
 }
 
 }
 
 
 void interrupt low_priority Low_ISR(void)
 {
 
 
 if(TX1IF && TX1IE)
 
 {
 
 sRS232ISR();
 
 }
 
 
 if(RC1IF && RC1IE)
 
 {
 
 sRS232RECCmd();
 
 }
 
 
 
 if(TMR0IE && TMR0IF)
 
 {
 
 
 
 sTimeBaseISR();
 
 }
 }
 
 
 | 
 |