|

楼主 |
发表于 2023-12-1 09:37:23
|
显示全部楼层
硬汉哥,昨天又做了测试,发现在发送模块中 如果发送完成后 延迟1ms 再次发送 就很快会出现发送不成功的情况,这种情况 有没有什么改进的方式呢 具体发送模块代码如下,其他代码与您的Demo工程一致
void TcpSevTx(void)
{
int32_t iCount;
uint32_t maxlen;
uint8_t *sendbuf;
uint32_t send_len = 0;
uint8_t msg_prio;
uint8_t *txbufptr;
osDelay(TcpTxCycleTime);/*在这里 延迟时间如果是1ms 将在10S 左右一直发不出数据*/
if(osMessageQueueGet(TcpTxQueueHandle,TcpSendNumBuf,&msg_prio,0)==osOK)/*回复请求消息*/
{
TrsmitNumT = TcpSendNumBuf[0];
}
else//发送数据
{
if(TestF)/*模拟测试数据发送*/
{
memcpy(TcpSendBuf,TcpSendBuf1,1780);/*测试数据在TcpSendBuf1 中*/
TrsmitNumT = 1068;
}
else/*武数据发送*/
{
return ;
}
}
iCount = TrsmitNumT;//send_len;
do
{
if(netTCP_SendReady(tcp_sock) == true )
{
maxlen = netTCP_GetMaxSegmentSize (tcp_sock);
iCount -= maxlen;
if(iCount < 0)
{
/* 这么计算没问题的 */
maxlen = iCount + maxlen;
}
sendbuf = netTCP_GetBuffer(maxlen);
for(send_len=0;send_len<maxlen;send_len++)
{
sendbuf[send_len] = TcpSendBuf[send_len];
//txbufptr++;
}
/* 必须使用申请的内存空间 */
netTCP_Send (tcp_sock, sendbuf, maxlen);
retryCnt = 0;
retryCnt = HAL_GetTick();
}
}while(iCount > 0);
}
|
|