uestcahui 发表于 2022-5-11 17:07:30

求助 :RTX5 + RL-TCPnet 无法发送数据

ETH0_THREAD_PRIORITY    osPriorityAboveNormal
NET_THREAD_PRIORITY   osPriorityNormal
自己的任务线程(sockTask)优先级是 osPriorityNormal1;

在tcp回调中把数据放入buf,并激活任务处理线程
uint32_t tcp_cb_func (int32_t socket, netTCP_Event event,
                      const NET_ADDR *addr, const uint8_t *buf, uint32_t len) {
        if(event == netTCP_EventData){
// 把数据放入buf
                osThreadFlagsSet(sockTaskHandle,0x00000001U);
        }
return (0);
}

在任务处理线程中读取数据,并回复
int32_t tcp_sock;
void iap_sock_rec_task(void* arg){
    netInitialize ();
        tcp_sock = netTCP_GetSocket (tcp_cb_func);
        while (1)
        {
      uint32_t flag = osThreadFlagsWait(0x00000001U,osFlagsWaitAny,1000);
                netTCP_State state =netTCP_GetState(tcp_sock);
                if(state == netTCP_StateESTABLISHED) // 连接成功
                {
                  if(flag == 0x00000001U){
                if(netTCP_SendReady(tcp_sock)){
                  // 处理数据,并回复
                  netTCP_Send (tcp_sock, response, response_len);
                }else{
                  log_debug("sock busy");
                }
            }
                }
                else if (state == netTCP_StateCLOSED){
                        if(g_ucEthLinkStatus == 2){
                                netTCP_Connect (tcp_sock, (NET_ADDR *)&addr, 0);
                log_info("try connect");
                        }
                }
        }
}

测试中发现,每次netTCP_SendReady 都返回false。

如果将任务优先级设为osPriorityNormal时可以发送。

请问:调用tcp发送的线程不能高于网络线程嘛?

eric2013 发表于 2022-5-11 17:47:06

原始socket要获取缓冲然后发送。不能自己指定缓冲地址发送。

此贴例子可以试试:

https://www.armbbs.cn/forum.php?mod=viewthread&tid=95243

BruceWang 发表于 2022-11-6 17:38:25

解决了没有,我也在搞和你一样的应用,有没有经验分享呀😁
页: [1]
查看完整版本: 求助 :RTX5 + RL-TCPnet 无法发送数据