搜索
bottom↓
回复: 11

LWIP TCPserver 100m秒发送1次数据如何实现

[复制链接]

出0入0汤圆

发表于 2018-12-20 16:18:55 | 显示全部楼层 |阅读模式
本帖最后由 蜗牛蜗牛 于 2018-12-21 08:02 编辑

历程我用是正点原子的历程改的
原来的历程是每次按键发送一次数据,我现在需要的每秒钟发送10次数据

lwIP tcp_poll的回调函数  具体在哪里回调我还不太清楚,但是查资料得知 这个函数每1秒调用2次,
能不能实现 LWIP TCPserver 每1秒发送10次 ,数据量在100-200字节之间每次发送的.
有用过或者类似的程序可以丢过来
程序没有用操作系统 是ram模式

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2018-12-20 16:59:52 | 显示全部楼层
顶一下--------------------

出0入0汤圆

发表于 2018-12-20 20:18:32 | 显示全部楼层
要准确的100MS   网络很难保证

出0入0汤圆

 楼主| 发表于 2018-12-21 08:01:12 | 显示全部楼层
lyxer 发表于 2018-12-20 20:18
要准确的100MS   网络很难保证

不用准确,关键是1秒钟可以发送多次,超过5次就可以

出0入0汤圆

发表于 2018-12-21 08:10:26 | 显示全部楼层
lwip 的tcp很慢吗?  10ms发一次也没问题啊

出0入0汤圆

 楼主| 发表于 2018-12-21 08:31:38 | 显示全部楼层
powerk6 发表于 2018-12-21 08:10
lwip 的tcp很慢吗?  10ms发一次也没问题啊

//lwIP tcp_poll的回调函数
err_t tcp_server_poll(void *arg, struct tcp_pcb *tpcb)
{
        err_t ret_err;
        struct tcp_server_struct *es;
        es=(struct tcp_server_struct *)arg;
        if(es!=NULL)
        {
                if(tcp_server_flag&(1<<7))        //判断是否有数据要发送
                {
                        es->p=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)tcp_server_sendbuf),PBUF_POOL);//申请内存
                        pbuf_take(es->p,(char*)tcp_server_sendbuf,strlen((char*)tcp_server_sendbuf));
                        tcp_server_senddata(tpcb,es);                 //轮询的时候发送要发送的数据
                        tcp_server_flag&=~(1<<7);                          //清除数据发送标志位
                        if(es->p!=NULL)pbuf_free(es->p);         //释放内存       
                }else if(es->state==ES_TCPSERVER_CLOSING)//需要关闭连接?执行关闭操作
                {
                        tcp_server_connection_close(tpcb,es);//关闭连接
                }
                ret_err=ERR_OK;
        }else
        {
                tcp_abort(tpcb);//终止连接,删除pcb控制块
                ret_err=ERR_ABRT;
        }
        return ret_err;
}
//lwIP tcp_sent的回调函数(当从远端主机接收到ACK信号后发送数据)]
我用的正点原子的例子,我不知道怎么才能修改TCPserver 的发送速度, 这个和发送有关的回调函数是 1秒调用2次所以,问问大家怎么修改

出0入0汤圆

 楼主| 发表于 2018-12-21 08:35:27 | 显示全部楼层
powerk6 发表于 2018-12-21 08:10
lwip 的tcp很慢吗?  10ms发一次也没问题啊

/**
* Used to specify the function that should be called periodically
* from TCP. The interval is specified in terms of the TCP coarse
* timer interval, which is called twice a second.
*
*/
void
tcp_poll(struct tcp_pcb *pcb, tcp_poll_fn poll, u8_t interval)
{
  LWIP_ASSERT("invalid socket state for poll", pcb->state != LISTEN);
#if LWIP_CALLBACK_API
  pcb->poll = poll;
#else /* LWIP_CALLBACK_API */  
  LWIP_UNUSED_ARG(poll);
#endif /* LWIP_CALLBACK_API */  
  pcb->pollinterval = interval;
}
这个是我找到LWIP 调用源码 也是说1秒2次, 我没有用操作系统 是用RAM 模式

出40入42汤圆

发表于 2018-12-21 08:45:51 | 显示全部楼层
不用准确,关键是1秒钟可以发送多次,超过5次就可以

如果是这种需求的话,直接开个100ms定时器,在定时器里面把数据写入发送缓冲区,
然后循环调用TCP发送流程,或是在定时器里面直接调用发送流程就可以了
还有,是RAW模式,不是RAM模式。。。

出100入113汤圆

发表于 2018-12-20 16:18:56 | 显示全部楼层
这个问题,关键要看你1秒调用了多少次发送函数。与lwip无关!网络如果能跟上,你发多少次都可以。我现在测试3个tcp连接,每个连接1ms发一次1460字节,整体速率在36Mbps是稳定的。

出0入0汤圆

 楼主| 发表于 2018-12-21 08:52:38 | 显示全部楼层
落叶知秋 发表于 2018-12-21 08:45
如果是这种需求的话,直接开个100ms定时器,在定时器里面把数据写入发送缓冲区,
然后循环调用TCP发送流程 ...

谢谢我真是没注意

出0入0汤圆

 楼主| 发表于 2018-12-21 08:53:32 | 显示全部楼层
saccapanna 发表于 2018-12-21 08:46
这个问题,关键要看你1秒调用了多少次发送函数。与lwip无关!网络如果能跟上,你发多少次都可以。我现在测 ...

谢谢告知谢谢

出0入0汤圆

 楼主| 发表于 2018-12-21 09:31:47 | 显示全部楼层
落叶知秋 发表于 2018-12-21 08:45
如果是这种需求的话,直接开个100ms定时器,在定时器里面把数据写入发送缓冲区,
然后循环调用TCP发送流程 ...

谢谢指点,用你们方法解决了问题分数只有一个我给了另外一位,不好意思了,再次谢谢回复
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 22:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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