找回密码
 立即注册
查看: 138|回复: 4

数据缩在一起再分开,是为啥

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-23 08:28
  • 签到天数: 42 天

    [LV.5]常住居民I

    14

    主题

    54

    回帖

    390

    积分

    中级会员

    积分
    390
    发表于 2024-3-15 16:43:58 | 显示全部楼层 |阅读模式




    截图202403151642027851.jpg

    如上,过一会就好了,
    产品现象,就是反应有点慢,按理应该跟上面,074同时变化的
    u8 rx_old;



            //====初始化数据=====
            CAN1_Tx.FF = STANDARD_FRAME;    //标准帧
            CAN1_Tx.RTR = 0;                //0:数据帧,1:远程帧
            CAN1_Tx.DLC = 0x08;             //数据长度
            CAN1_Tx.ID = 0x21A;            //CAN ID
            CAN1_Tx.DataBuffer[0] = 0x20;   //数据内容
            CAN1_Tx.DataBuffer[1] = 0x00;
            CAN1_Tx.DataBuffer[2] = 0x00;
            CAN1_Tx.DataBuffer[3] = 0x00;
            CAN1_Tx.DataBuffer[4] = 0x00;
            CAN1_Tx.DataBuffer[5] = 0x00;
            CAN1_Tx.DataBuffer[6] = 0x00;
            CAN1_Tx.DataBuffer[7] = 0x00;

    /*       
            CAN2_Tx.FF = EXTENDED_FRAME;    //扩展帧
            CAN2_Tx.RTR = 0;                //0:数据帧,1:远程帧
            CAN2_Tx.DLC = 0x08;             //数据长度
            CAN2_Tx.ID = 0x03456789;        //CAN ID
            CAN2_Tx.DataBuffer[0] = 0x21;   //数据内容
            CAN2_Tx.DataBuffer[1] = 0x22;
            CAN2_Tx.DataBuffer[2] = 0x23;
            CAN2_Tx.DataBuffer[3] = 0x24;
            CAN2_Tx.DataBuffer[4] = 0x25;
            CAN2_Tx.DataBuffer[5] = 0x26;
            CAN2_Tx.DataBuffer[6] = 0x27;
            CAN2_Tx.DataBuffer[7] = 0x28;
    */
        B_Can1Send = 0;
        B_Can2Send = 0;
        while(1)
        {
            if(B_1ms)   //1ms到
            {
                B_1ms = 0;
                KeyResetScan();   //P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码

                            if(B_Can1Read)
                    {
                        B_Can1Read = 0;
                       
                        CANSEL = 0;         //选择CAN1模块
                                   
                        n = CanReadMsg(CAN1_Rx);    //读取接收内容
                                                                       
                        if(n>0)
                        {
                            for(i=0;i<n;i++)
                            {
            //                    CanSendMsg(&CAN1_Rx);  //CAN总线原样返回

                                                    if (CAN1_Rx.ID == 0X74)
                                                            {
                                                            if(CAN1_Rx.DataBuffer[0] != rx_old)
                                                                    {
                                                                            rx_old = CAN1_Rx.DataBuffer[0];
                                                                            CAN1_Tx.DataBuffer[0] = (CAN1_Rx.DataBuffer[0] )&0xF0;
                                                                    }
                                                            }
                                                   
                                printf("CAN1_rx From 产品 :ID=0x%03lX DLC=%d FF=%d RTR=%d ",CAN1_Rx.ID,CAN1_Rx.DLC,CAN1_Rx.FF,CAN1_Rx.RTR);   //串口打印帧信息
                                for(j=0;j<CAN1_Rx.DLC;j++)
                                {
                                    printf("0x%02X ",CAN1_Rx.DataBuffer[j]);    //从串口输出收到的数据
                                }
                                printf("\r\n");
                            }
                        }
                    }


                           
                if(++msecond >= 100)   //1秒到
                {
                    msecond = 0;

                    //------------------处理CAN1模块-----------------------
                    CANSEL = 0;         //选择CAN1模块
                    sr = CanReadReg(SR);

                    if(sr & 0x01)                //判断是否有 BS:BUS-OFF状态
                    {
                        CANAR = MR;
                        CANDR &= ~0x04;  //清除 Reset Mode, 从BUS-OFF状态退出
                    }
                    else
                    {
                        CanSendMsg(&CAN1_Tx);   //发送一帧数据
                    }
    /*
                    //------------------处理CAN2模块-----------------------
                    CANSEL = 1;         //选择CAN2模块
                    sr = CanReadReg(SR);

                    if(sr & 0x01)                //判断是否有 BS:BUS-OFF状态
                    {
                        CANAR = MR;
                        CANDR &= ~0x04;  //清除 Reset Mode, 从BUS-OFF状态退出
                    }
                    else
                    {
                        CanSendMsg(&CAN2_Tx);   //发送一帧数据
                    }*/
                }
            
         }
            
           
            if(B_Can2Read)
                    {
                        B_Can2Read = 0;
                       
                        CANSEL = 1;         //选择CAN2模块
                        n = CanReadMsg(CAN2_Rx);    //读取接收内容
                        if(n>0)
                        {
                            for(i=0;i<n;i++)
                            {
            //                    CanSendMsg(&CAN2_Rx);  //CAN总线原样返回
           
                                printf("CAN2_rx From CAN1_tx:ID=0x%03lX DLC=%d FF=%d RTR=%d ",CAN2_Rx.ID,CAN2_Rx.DLC,CAN2_Rx.FF,CAN2_Rx.RTR);   //串口打印帧信息
                                for(j=0;j<CAN2_Rx.DLC;j++)
                                {
                                    printf("0x%02X ",CAN2_Rx.DataBuffer[j]);    //从串口输出收到的数据
                                }
                                printf("\r\n");
                            }
                        }
                    }
            

            if (bUsbOutReady) //USB调试及复位所需代码
            {
                usb_OUT_done();
            }
        }
    }


    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1163

    积分

    金牌会员

    积分
    1163
    发表于 2024-3-19 12:31:48 | 显示全部楼层
    没看明白,这是在网页上进行测试吗?
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 08:28
  • 签到天数: 42 天

    [LV.5]常住居民I

    14

    主题

    54

    回帖

    390

    积分

    中级会员

    积分
    390
     楼主| 发表于 2024-3-19 13:22:35 | 显示全部楼层
    llyymm 发表于 2024-3-19 12:31
    没看明白,这是在网页上进行测试吗?

    不是网页,是CAN分析仪CANalyst-II界面


    其实动作很简单

    就是 A: ID 0XAA 根据四个不同动作 发送 : 11 ,22 ,33 , 44
    然后 B:  ID  0XBB 根据收到的四个不同动作 返回:  10 ,20, 30 ,40  ,
    接着:0XAA  会根据 返回的:  10 ,20, 30 ,40   ,点亮不同的灯

    现在就是: A产品  0XAA 根据四个不同动作 发送 : 11 ,22 ,33 , 44 很迅速  

                     B产品 0XBB 根据收到的四个不同动作 返回:  10 ,20, 30 ,40 的过程会有反应慢的现象,具体就是会在返回过程中,数据显示缩在一起。
                     导致点亮不同的灯 也会滞后于动作 。
                        等数据显示分开正常了,灯才正常点亮。

    截图202403191317099728.jpg
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    4 天前
  • 签到天数: 47 天

    [LV.5]常住居民I

    15

    主题

    221

    回帖

    1163

    积分

    金牌会员

    积分
    1163
    发表于 2024-3-19 17:36:53 | 显示全部楼层
    我也是使用的CAN分析仪进行的CAN测试,感觉CAN数据很稳定,没有出现过你这种情况,第一 STC测试板和CAN分析仪的通信速率是否完全一样?第二B产品收到数据执行动作后返回数据慢,是否执行的动作占用了中断?按理说CAN数据是一次性发送一帧的,不应该会出现压缩的情况
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-4-23 08:28
  • 签到天数: 42 天

    [LV.5]常住居民I

    14

    主题

    54

    回帖

    390

    积分

    中级会员

    积分
    390
     楼主| 发表于 2024-3-20 16:12:11 | 显示全部楼层
    本帖最后由 QW123 于 2024-3-20 16:13 编辑
    llyymm 发表于 2024-3-19 17:36
    我也是使用的CAN分析仪进行的CAN测试,感觉CAN数据很稳定,没有出现过你这种情况,第一 STC测试板和CAN分析 ...

    截图202403201038428244.jpg

    大概是因为这个
    要改成这样,

    if(n>0)
    {
    for(i=0;i<n;i++)
    {


    if (CAN1_Rx(i).ID == 0X74)
    {                                                        
      if(CAN1_Rx(i).DataBuffer[0] != rx_old)

      {
         rx_old = CAN1_Rx(i).DataBuffer[0];
         CAN1_Tx.DataBuffer[0] = (CAN1_Rx(i).DataBuffer[0] )&0xF0;
      }
    }


    推测如果没有, 又有由于缓存区那边是8帧空间,程序前置是  在 N 帧数里 进行 for 判断

    所以,if (CAN1_Rx.ID == 0X74) 是对第一帧满足时,if(CAN1_Rx.DataBuffer[0]  )又对第一帧第一个数据进行判断
    这么一来,如果不是第一帧,第一个数据,就会掠过,等待整个for缓冲区循环结束?




    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-6 16:48 , Processed in 0.068042 second(s), 50 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表