在线时间5 小时
UID3421462
注册时间2017-9-7
NXP金币0
该用户从未签到
新手上路

- 积分
- 28
- 最后登录
- 2017-9-21
|
最近在用KEA128写CAN程序时,总遇到发送缓冲区已满问题,代码如下:
if(PIT_10ms)
{
for(bID_Switch=0;bID_Switch<CANIF_INIT_NUMBER_OF_STATIC_CANTXPDUIDS;bID_Switch++)
{
if (com_TxPduTbl[bID_Switch].Timer > COM_TX_CYCLE_TIME)
{
com_TxPduTbl[bID_Switch].Timer -= COM_TX_CYCLE_TIME;
}
else
{
com_TxPduTbl[bID_Switch].Timer = com_TxConfig_C[bID_Switch];
for(i=0;i<16;i++)
{
adc[i] = adc_value[i];
}
switch(bID_Switch)
{
case CANIF_TX_VLT0_STATIC_MSG:
{
sCANTxItemInfo.ID_Type.ID = CanIf_StaticPduTxCfg_C[CANIF_TX_VLT0_STATIC_MSG];
sCANTxItemInfo.u32DataLength = 8;
sCANTxItemInfo.u8DataBuff[0] = adc[0];
sCANTxItemInfo.u8DataBuff[1] = adc[0]>>8;
sCANTxItemInfo.u8DataBuff[2] = adc[1];
sCANTxItemInfo.u8DataBuff[3] = adc[1]>>8;
sCANTxItemInfo.u8DataBuff[4] = adc[2];
sCANTxItemInfo.u8DataBuff[5] = adc[2]>>8;
sCANTxItemInfo.u8DataBuff[6] = adc[3];
sCANTxItemInfo.u8DataBuff[7] = adc[3]>>8;
sCANTxItemInfo.u8BPR = 0x80;
CAN_SendItemToBuffer(MSCAN,&sCANTxItemInfo,&sCAN_TxBuff);
CAN_CheckSendBufferFrame(MSCAN,&sCAN_TxBuff);
}
default:
bID_Switch = 0;
break;
}
} //if
} //for
PIT_10ms = 0;
}
for(i=0;i<16;i++)
{
if((i!=2)&&(i!=3))
{
adc_value[i]=ADC_Read(i);
}
}
在将adc_value的值赋值给 sCANTxItemInfo.u8DataBuff[0]后,在发送过程中,总是出现发送缓冲区已满的问题;
而如果不将adc_value的值赋给 sCANTxItemInfo.u8DataBuff[0],而是将数值常量赋值给 sCANTxItemInfo.u8DataBuff[0],则不会有此问题。
不知道大家有没有遇到过这种问题?又是怎么解决的?
|
|