QW123 发表于 2024-3-11 21:59:47

CAN1_Tx.DataBuffer[i]= 0x。。必须是十六进制数吗?能否使用变量?

如题


//====初始化数据=====
       
        //====CAN1发送的数据格式及其内容=====
        CAN2_Tx.FF = STANDARD_FRAME;    //标准帧
        CAN2_Tx.RTR = 0;                //0:数据帧,1:远程帧
        CAN2_Tx.DLC = 0x08;             //数据长度
        CAN2_Tx.ID = 0x21A;            //CAN ID
       
        CAN2_Tx.DataBuffer = 0x20;        //数据内容---->CAN2_Tx.DataBuffer = sent_data;这样用变量代替?
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       
        CAN2_Tx.DataBuffer = 0x00;       


比如,屠龙刀A 的CAN1 专门发送 sent_data, 同时需要接收 总线上来的 设置好的报文,并判断 这个报文第一个字节的数据,并时时更新给sent_data ,又发回给总线


   if(B_Can2Read)
      {
            B_Can2Read = 0;
            
            CANSEL = 1;         //选择CAN2模块
            n = CanReadMsg(CAN2_Rx);    //读取接收内容
            if(n>0)
            {
                for(i=0;i<n;i++)
                {
                         if(CAN2_Rx.ID==0x123)

                              {
                                    if(CAN2_Rx.DataBuffer == 0x02)
                                          {
                                                 sent_data= 0x02;    
                                        }
                               }                               
                }
            }
            CanSendMsg(&CAN2_Rx);   //CAN总线原样返回
      }


如上, 不知是否可行?
顾虑就是
if的嵌套有点多了, 不知道能用swtich吗?

21cnsound 发表于 2024-3-11 22:14:28

CAN2_Tx.DataBuffer = 0x20;      //数据内容---->CAN2_Tx.DataBuffer = sent_data;这样用变量代替?----------可以。这里是一个字节,范围是0-255,和进制没关系

if的嵌套有点多了, 不知道能用swtich吗?----应该不可以,switch是对一个变量不同值得条件分支,这里的多个if是对多个条件的分支。

QW123 发表于 2024-3-12 08:50:13

21cnsound 发表于 2024-3-11 22:14
CAN2_Tx.DataBuffer = 0x20;      //数据内容---->CAN2_Tx.DataBuffer = sent_data;这样用变量 ...

好的,谢谢,我完整的试试。
页: [1]
查看完整版本: CAN1_Tx.DataBuffer[i]= 0x。。必须是十六进制数吗?能否使用变量?