1.使用串口0接收外部模块发来的33个字节,使用波特率9600,模块每隔50ms发出一组33字节数据。
2.串口0使用中断方式接收数据,接收数据期间我将其他模块(ad,定时器)中断关闭以及关闭总中断,接收到正确数据后标志位uartflag置一,打开其他中断。
3.使用定时器隔2秒查询uartflag 进行数据分析。在这个情况下持续一段时间,堆栈会溢出,但功能没有问题
4. 更严重的是 :——-在切换到另个一状态时候,串口直接失去作用。
堆栈我已经设置为1024个
问题 如何合理的优化串口中断?在4中串口为什么失去作用?在切换到4状态时,初始化串口0都没有用,这个是为什么?
附带串口0中断程序
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
static uchar i=0,j=0;
_DINT(); //关闭总中断 RecDataBuf[i][j] = RXBUF0 ;//获取数据
if(j == 0 && RecDataBuf[i][0]!= 0x55)return; //舍弃帧头错误的数据
j++;
if(j == 11)
{
i++;
j = 0;
}
DatCount++;
if(DatCount == 33)
{
i = 0;
j = 0;
UartFlag =1;
DatCount = 0;
MPU0; //关闭MPU6050使能 TACTL |= TAIE; //打开定时器中断 TACCR0=32768; //计数周期为32768 ADC12IE = 0x01; // 使能ADC中断,采样端口6.0
}
_EINT(); //打开全局中断}
Argun Lee:
补充:串口U0CRTl寄存器 RXERR RXWAKE OE三位标志一直是至高
Argun Lee:
回复 Argun Lee:
德州仪器的技术员不帮忙分析一下么? 给点指导意见也行啊 调了一个礼拜了
灰小子:
楼主你好。你说的问题三“堆栈溢出但功能没问题”,不理解这是什么状态,一般堆栈溢出程序会跑飞或者得到一些异常的变量等。
问题四的问题觉得是串口配置问题居多,建议提供完成的代码或工程。
另外,在你提供的这段中断服务程序中,看到了使能全局中断等操作,这会打开中断嵌套功能,造成堆栈溢出等异常情况,建议慎用中断嵌套