硬汉嵌入式论坛

 找回密码
 立即注册
查看: 809|回复: 2
收起左侧

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

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2022-5-11 17:07:30 | 显示全部楼层 |阅读模式
ETH0_THREAD_PRIORITY    osPriorityAboveNormal
NET_THREAD_PRIORITY     osPriorityNormal
自己的任务线程(sockTask)优先级是 osPriorityNormal1;

在tcp回调中把数据放入buf,并激活任务处理线程
[C] 纯文本查看 复制代码
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);
}


在任务处理线程中读取数据,并回复
[C] 纯文本查看 复制代码
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发送的线程不能高于网络线程嘛?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106769
QQ
发表于 2022-5-11 17:47:06 | 显示全部楼层
原始socket要获取缓冲然后发送。不能自己指定缓冲地址发送。

此贴例子可以试试:

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

使用道具 举报

0

主题

30

回帖

30

积分

新手上路

积分
30
发表于 2022-11-6 17:38:25 | 显示全部楼层
解决了没有,我也在搞和你一样的应用,有没有经验分享呀😁
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 11:04 , Processed in 0.212924 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表