硬汉嵌入式论坛

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

[RL-TCPnet] 请教硬汉关于RL-TCP使用过程中的问题

[复制链接]

17

主题

32

回帖

83

积分

初级会员

积分
83
发表于 2019-11-26 09:52:26 | 显示全部楼层 |阅读模式
硬汉你好,我在使用RL-TCPnet的TCP客户端模式的时候有3个疑问:1.对于main_TcpNet()函数,是不是可以像uip或者lwip中的处理函数一样,专门建立一个任务进行运行
我试验过:
static uint64_t AppTaskMain_TcpNetStk[1024/8];
OS_TID HandleTaskMain_TcpNet = NULL;

__task void AppTaskMain_TcpNet(void)
{
        while(1)
        {
                main_TcpNet();
                os_dly_wait(10);
        }
}

任务的优先级为1,太低的话有时候发送不能及时相应。
目前似乎没有什么问题,不知道长期使用时候是否有问题。

2.如果对于TCP客户端的发送函数(tcp_send (socket_tcp, sendbuf, maxlen))在调用前均使用                                       
        if (tcp_check_send (socket_tcp) == __TRUE)
进行一下“是否能发送”的判断,是不是在使用 tcp_send的时候就不需要用互斥信号量进行保护了,在程序的不同地方就可以在判断状态后(tcp_check_send )直接使用了?

3.对于例程中使用发送函数时均使用了
                                        do
                                        {
//                                                main_TcpNet();
                                                if (tcp_check_send (socket_tcp) == __TRUE)
                                                {
                                                        maxlen = tcp_max_dsize (socket_tcp);
                                                        iCount -= maxlen;
                                                       
                                                        if(iCount < 0)
                                                        {
                                                                /* 这么计算没问题的 */
                                                                maxlen = iCount + maxlen;
                                                        }
                                                       
                                                        sendbuf = tcp_get_buf(maxlen);
                                                        sendbuf[0] = '1';
                                                        sendbuf[1] = '2';
                                                        sendbuf[2] = '3';
                                                        sendbuf[3] = '4';
                                                        sendbuf[4] = '5';
                                                        sendbuf[5] = '6';
                                                        sendbuf[6] = '7';
                                                        sendbuf[7] = '8';
                                                       
                                                        /* 测试发现只能使用获取的内存 */
                                                        tcp_send (socket_tcp, sendbuf, maxlen);
                                                }
                                               
                                        }while(iCount > 0);
                                        break;

这样的模式,是否能理解为TCP_net的发送自带了一个发送FIFO,所以每次循环不停来判断“能发送的”和“要发送的”长度,所以一次放入很多数据也不会丢失?
请硬汉有空时指教一下,谢谢。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107137
QQ
发表于 2019-11-26 10:35:52 | 显示全部楼层
1、【重点知识】RL-TCPnet高效的事件触发框架,实际项目强烈推荐
http://www.armbbs.cn/forum.php?m ... 0831&fromuid=58
(出处: 硬汉嵌入式论坛)

2、此函数不支持多任务。
3、这个是一个完善的数据发送框架,发送多大都可以。
回复

使用道具 举报

17

主题

32

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2019-11-26 10:44:17 | 显示全部楼层
eric2013 发表于 2019-11-26 10:35
1、【重点知识】RL-TCPnet高效的事件触发框架,实际项目强烈推荐
http://www.armbbs.cn/forum.php?mod=vie ...

谢谢硬汉
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 03:08 , Processed in 0.151000 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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