CH32V307 以太網(wǎng)發(fā)送數(shù)據(jù)報(bào)錯(cuò)

??????????? if(len_1 != 0)
??????????? {
??????????????? ret = WCHNET_SocketSend(SocketId[i], &uart_data_t[i].RX_buffer[uart_data_t[i].rx_read&(UART_RX_DMA_SIZE-1)], &len_1);
??????????????? if (ret == 0)
??????????????? {
??????????????????? uart_data_t[i].rx_read += len_1;
??????????????? }
??????????????? else
??????????????? {
??????????????????? sprintf(debug,"eth send error\n");
??????????????????? tcp_send_strings(debug);
??????????????? }
??????????? }

??????????? /* send the rest of the data(if any) at beginning of RX_buffer? */
??????????? if( (len-len_1) != 0)
??????????? {
??????????????? len_1 = len-len_1;

??????????????? ret = WCHNET_SocketSend(SocketId[i], &uart_data_t[i].RX_buffer[0], &len_1);
??????????????? if (ret == 0)
??????????????? {
??????????????????? uart_data_t[i].rx_read += len_1;
??????????????? }
??????????????? else
??????????????? {
??????????????????? sprintf(debug,"eth send error\n");
??????????????????? tcp_send_strings(debug);
??????????????? }
??????????? }

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

使用WCHNET_SocketSend發(fā)送數(shù)據(jù)會出錯(cuò),這個(gè)是為啥?

ret = 0x11

#define WCHNET_ERR_MEM????????????????? 0x11????????????? //Out of memory error

是這個(gè)錯(cuò)誤,這個(gè)是為什么?

您好,從您描述上看應(yīng)該是協(xié)議棧發(fā)送緩沖區(qū)不足導(dǎo)致的異常,此時(shí)伴隨的是發(fā)送失敗,您可以監(jiān)控一下“len_1”的值,調(diào)用WCHNET_SocketSend函數(shù)后該值表示已經(jīng)發(fā)送的數(shù)據(jù)長度,也就是說“len_1”為0則表示沒發(fā)送成功。

產(chǎn)生的原因:應(yīng)該是應(yīng)用層發(fā)送數(shù)據(jù)過快,此時(shí)還未收到對端設(shè)備的ack,無法釋放發(fā)送緩沖區(qū)的數(shù)據(jù),導(dǎo)致緩沖區(qū)擁堵以至于后續(xù)數(shù)據(jù)發(fā)送失敗。

解決辦法:1、如果是帶系統(tǒng)的,要將接收部分的代碼優(yōu)先級調(diào)高,發(fā)送部分的代碼優(yōu)先級稍低。

2、降低應(yīng)用層發(fā)送速度。

3、如果發(fā)送速度很低依然有問題,那就查一下網(wǎng)絡(luò)情況是否很復(fù)雜,導(dǎo)致無法收到ACK。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频