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();
}
}
|