Board logo

标题: 2812跑十几个小时--死了 [打印本页]

作者: reporter    时间: 2013-9-9 14:43     标题: 2812跑十几个小时--死了

本帖最后由 孤独求粗 于 2013-7-24 16:14 编辑

我的2812 DSP程序大体是这样的:
1、用SCIB中断接收485数据,接收完后发送一组数据,中断接收周期为200ms;
2、我的中断接收的程序如下,因为这部分涉及到一个数据的转义(一包数据中遇到0x10会转移成0x10 0x10(不包括帧头帧尾及校验),接收到这包数后,要正确解析),之前没有转义的时候,程序一点问题都没有,可能是这段程序不知道哪里出了问题,查了半天也没查到。
3、前两天程序跑个三、四个小时就进非法中断(连仿真器);从昨天晚上开始跑,跑到今天早晨,一共跑了十几个小时,又死了,但是这次提示一个错误(如附件),貌似是什么堆栈溢出之类的,查了一天也没找到根源,现在急的要命要命的,希望论坛里的朋友能帮忙支支招。

    RS485_Get_Data[RS485_Get_Len] = (WORD8)(ScibRegs.SCIRXBUF.all & 0x00FF);
    if(RS485_Get_Data[0] == RS485_START1_FRAME)
    {
      if((RS485_Get_Data[RS485_Get_Len] == 0x10) && (RS485_Get_Len != 0) && \
         (RS485_True_Count != 34) && (RS485_True_Count != 35) && (RS485_True_Count != 36) && \
         (RS485_True_Count != 37))                //判断帧头(0x10 0x02)、帧尾(0x10 0x03)
          {
            RS485_True_Data[RS485_True_Count] = RS485_Get_Data[RS485_Get_Len];
                RS485_Get_Len++;
                flag++;
                if(flag % 2 == 0)
                {
                 RS485_True_Count++;
                 flag = 0;
                }
          }
      else
          {
            flag = 0;
            RS485_True_Data[RS485_True_Count] = RS485_Get_Data[RS485_Get_Len];
            RS485_True_Count++;
          if(RS485_True_Count == 38)       //去掉转义后的数据包真实长度是38个字节
            {
              CRC1 = (CRC_CCITT_FCS(RS485_Get_Data, (RS485_Get_Len-1)) & 0xFF00)>>8;
              CRC2 =  CRC_CCITT_FCS(RS485_Get_Data, (RS485_Get_Len-1)) & 0x00FF;
             if((CRC1 == RS485_Get_Data[RS485_Get_Len-1]) && (CRC2 == RS485_Get_Data[RS485_Get_Len]) && \
                (RS485_Get_Data[1] == RS485_START2_FRAME) && (RS485_Get_Data[RS485_Get_Len-3] == RS485_END1_FRAME) && \
                (RS485_Get_Data[RS485_Get_Len-2] == RS485_END2_FRAME))   //去掉转义后,判断这包数的帧头、帧尾、及校验,正确的话解析
              {
                RS485Data_Extract(RS485_True_Data);
                RS485_Get_End = 1;
                RS485_Get_Len = 0;
                RS485_True_Count = 0;
              }
              else
              {
                RS485_Get_Len = 0;
                RS485_True_Count = 0;
              }
            }
            else
            {
              RS485_Get_Len++;
            }
      }


        }
        else
        {
          RS485_Get_Len = 0;
          RS485_True_Count = 0;
        }

附件: 你需要登录才可以下载或查看附件。没有帐号?注册




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0