关于以下程序我的疑问是:
1.以下程序在编译时候并未出错,在can.h中对发送函数:u8 CAN1_SendData(u8 *TXmsg1,u8 *TXmsg2)无法完成声明,一声明编译就过不了,由于main函数还没去写,所以这个问题不解决就没法去写main函数,是不是发送函数的参数写的不太对?。
2.can发送部分我的想法是实现2个报文的发送,在发送函数中我初始化了两次发送这样的做法对吗,可以实现我的想法吗?
3.潜在的错误:为了让can调试可以顺利进行,我将发送的数据定义为了常量;然而实际应一般肯定是变量,那么我该使用什么样的方式去实现变量的发送?
在此我诚挚请求论坛前辈能帮帮我,特别是原子大哥哥
。
/*发送数据(8Byte)声明*/
u8 Data_ECU_Base1[8] = { Tem,speed_L,speed_H,Thro_L, Thro_H,BoostFlag,Tem_Null_6, Tem_Null_7};
u8 Data_ECU_Base2[8] = {TPressFlag,VIN_L, VIN_M,VIN_H, DoorFlag,LBeltFlag, OilPress_L,OilPress_H};
/*CAN发送部分*/
//发送2组报文,扩展格式ID
//数据长度 8 byte
//TXmsg:数据指针 8 byte
//返回值0:发送成功;其它:发送失败
u8 CAN1_SendData(u8 *TXmsg1,u8 *TXmsg2)
{
u8 i,j;
u8 TMailbox;
CanTxMsg TxMessage; //申请报文空间
/*ECU发送广播报文1*/
TxMessage.StdId = (ExtId_ECU_B1>>18)&0x7ff; //设置扩展CAN ID 标准基本ID部分 11位
TxMessage.ExtId = ExtId_ECU_B1&0x3FFFF; //设置扩展CAN ID 扩展ID部分 18位
TxMessage.RTR = CAN_RTR_DATA; //数据帧 0
TxMessage.IDE = CAN_ID_EXT; //设置IDE为扩展格式ID标志 0
TxMessage.DLC = 8; //数据长度 8byte,每次发送1帧(1byte)
for(i=0;i<8;i++) //小端方式发送,共8帧
{
TxMessage.Data
= TXmsg1; //发送数据
}
TMailbox = CAN_Transmit(CAN1,&TxMessage);//发送的数据
i=0;
while((CAN_TransmitStatus(CAN1, TMailbox)==CAN_TxStatus_Failed)&&(i<0XFF))i++; //等待发送结束
/*ECU发送广播报文2*/
TxMessage.StdId = (ExtId_ECU_B2>>18)&0x7ff; //设置扩展CAN ID 标准基本ID部分 11位
TxMessage.ExtId = ExtId_ECU_B2&0x3FFFF; //设置扩展CAN ID 扩展ID部分 18位
TxMessage.RTR = CAN_RTR_DATA; //数据帧 0
TxMessage.IDE = CAN_ID_EXT; //设置IDE为扩展格式ID标志 0
TxMessage.DLC = 8; //数据长度 8byte,每次发送1帧(1byte)
for(j=0;j<8;j++) //小端方式发送,共8帧
{
TxMessage.Data[j] = TXmsg2[j]; //发送数据
}
TMailbox = CAN_Transmit(CAN1,&TxMessage);//发送的数据
j=0;
while((CAN_TransmitStatus(CAN1, TMailbox)==CAN_TxStatus_Failed)&&(j<0XFF))j++; //等待发送结束
if(i>=0XFFF||j>=0XFFF)return 1;
return 0;
}
can.h文本中关于CAN发送部分我是这样写的
/*发送报文ID宏定义*/
#define ExtId_ECU_B1 0x16FE03E4
#define ExtId_ECU_B2 0x16FE04E4
/*为了能调试过我把发送的数据在h文件中定义为常量*/
enum{Tem = 38,speed_L = 0xFF,speed_H = 0x03,Thro_L = 0xFF,Thro_H = 0xAF,
BoostFlag = 0x01,Tem_Null_6 = 0xFF,Tem_Null_7 = 0xFF};
enum{TPressFlag = 0x02,VIN_L = 0x12,VIN_M = 0x34,VIN_H = 0x56,DoorFlag = 0xaa,
LBeltFlag = 0x00,OilPress_L = 0x1E,OilPress_H =0x11};
第二个问题就像我之前说的那样把两个邮箱的变量换成不一样的试一试,这个要等调试了才知道
第三个问题真的好难,还没想出解决办法,实在不行就只能申请buffer来存放了。
以上还请前辈们帮帮忙。谢谢了!
上面是我要在can.h中声明的发送函数,只要取消编译屏蔽就会提示以下编译错误:
..HARDWARECANCAN.c(173): error: #147-D: declaration is incompatible with "u8 CAN1_SendData(u8, u8)" (declared at line 61 of "..HARDWARECANcan.h")
好像说我同一个函数形参发生冲突了,怎么就冲突了,我没太看出来。
一周热门 更多>