|
硬汉你好,我在使用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,所以每次循环不停来判断“能发送的”和“要发送的”长度,所以一次放入很多数据也不会丢失?
请硬汉有空时指教一下,谢谢。
|
|