锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

指针的一种用法(优化代码)

时间:2024-05-26 09:37:10

/************************************************************************ 函数名 :unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir) 功能  :can发送 参数  :*can_tmp 数据包 pir: 优先级 0~3 返回  :1->缓冲池满需要等待下次装入发送缓冲池 0->成功放入缓冲池************************************************************************/unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir){ unsigned char n,flag; unsigned char temp; unsigned char *P_addr,*P_addr_temp; flag = 0; if((TXB0CON&0x08)==0)  {   P_addr = (unsigned char*)(&TXB0CON);   flag = 1;  } if((TXB1CON&0x08)==0)  {   P_addr = (unsigned char*)(&TXB1CON);   flag = 1;  } if((TXB2CON&0x08)==0)  {   P_addr = (unsigned char*)(&TXB2CON);   flag = 1;  }if(flag==1)  {       P_addr_temp = P_addr;      *P_addr = pir;       P_addr++;      if(can_tmp->IDR_RTR&0x02)//扩展标识符      {       *P_addr = ((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));       temp = can_tmp->ID[2]&0x03;       temp|=((can_tmp->ID[2]&0x1C)<<3);       temp|= 0x08;       P_addr++;       *P_addr = temp;       P_addr++;       *P_addr = can_tmp->ID[1];       P_addr++;       *P_addr = can_tmp->ID[0];       P_addr++;      }     else    {        *P_addr = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));;         P_addr++;        *P_addr = (can_tmp->ID[0]<<5);         P_addr+=3;   }        *P_addr = can_tmp->length;        P_addr++;       for(n=0;nlength;n++)        {        *P_addr =can_tmp->DATA[n];        P_addr++;       }       *P_addr_temp |= 0x08;      return 0;  }  return 1;}/************************************************************************ 函数名 :unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir) 功能  :can发送 参数  :*can_tmp 数据包 pir: 优先级 0~3 返回  :1->缓冲池满需要等待下次装入发送缓冲池 0->成功放入缓冲池************************************************************************/unsigned char CAN_Send_dat(CAN_DAT *can_tmp,unsigned char pir){ unsigned char n; unsigned char temp; unsigned char *P_addr;if((TXB0CON&0x08)==0)   {   // TXB0CON&=0xfc;   //bit3=0标准标识符,bit3=1扩展标识符,bit7-5:标准标识符2-0位,bit7-5 扩展ID[16-17]    TXB0CON = pir;//|= pir;           //设置TXB0为最高优先级3   if(can_tmp->IDR_RTR&0x02)//扩展标识符   { TXB0EIDL  = can_tmp->ID[0];//扩展ID[0-7] TXB0EIDH  = can_tmp->ID[1];//扩展ID[8-15] TXB0SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]    temp= ((can_tmp->ID[2]&0x1C)<<3);    TXB0SIDL |= temp;//标准[0-3]    TXB0SIDL |= 0x08; TXB0SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位   }   else   {    TXB0SIDL = (can_tmp->ID[0]<<5);//标准[0-3]    TXB0SIDH = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));   }//if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40; TXB0DLC=can_tmp->length;    P_addr = &TXB0D0;    for(n=0;nlength;n++)    {     *P_addr =can_tmp->DATA[n];      P_addr++;    }    TXB0CON=TXB0CON|0x08; /* bit3(TXREQ)=1请求发送 */    return 0;  }  if((TXB1CON&0x08)==0)   {   // TXB1CON&=0xfc;    TXB1CON = pir;//|= pir;   if(can_tmp->IDR_RTR&0x02)//扩展标识符   { TXB1EIDL  = can_tmp->ID[0];//扩展ID[0-7] TXB1EIDH  = can_tmp->ID[1];//扩展ID[8-15] TXB1SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]    temp= ((can_tmp->ID[2]&0x1C)<<3);    TXB1SIDL |= temp;//标准[0-3]    TXB1SIDL |= 0x08; TXB1SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位   }   else   {    TXB1SIDL = (can_tmp->ID[0]<<5);//标准[0-3]    TXB1SIDH = ((can_tmp->ID[1]<<5)|(can_tmp->ID[0]>>3));   }  //if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40; TXB1DLC=can_tmp->length;     P_addr = &TXB1D0;    for(n=0;nlength;n++)    {     *P_addr =can_tmp->DATA[n];      P_addr++;    }    TXB1CON=TXB1CON|0x08; return 0;  }if((TXB2CON&0x08)==0)  {    //TXB2CON&=0xfc;    TXB2CON = pir;   if(can_tmp->IDR_RTR&0x02)//扩展标识符   { TXB2EIDL  = can_tmp->ID[0];//扩展ID[0-7] TXB2EIDH  = can_tmp->ID[1];//扩展ID[8-15] TXB2SIDL  = can_tmp->ID[2]&0x03;//扩展ID[16-17]    temp= ((can_tmp->ID[2]&0x1C)<<3);    TXB2SIDL |= temp;//标准[0-3]    TXB2SIDL |= 0x08; TXB2SIDH=((can_tmp->ID[2]>>5)|(can_tmp->ID[3]<<3));//标准标识符的10-3位   }   else   {    TXB2SIDL = (can_tmp->ID[0]<<5);//标准[0-3]    TXB2SIDH = (can_tmp->ID[1]<<5|(can_tmp->ID[0]>>3));   }// if(can_tmp->IDR_RTR&0x01)can_tmp->length|=0x40; TXB2DLC=can_tmp->length;      P_addr = &TXB2D0;    for(n=0;nlength;n++)    {     *P_addr =can_tmp->DATA[n];      P_addr++;    }    TXB2CON=TXB2CON|0x08; return 0;  }return 1;}

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章