您的位置 首页 FPGA

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

************************************************************************函数名:unsignedcharCAN_Send_dat

/************************************************************************

函数名 :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为最高优先级3if(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;}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/255653.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部