你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教下,请教下,关于lwip 轮询函数发送数据 ?

[复制链接]
hpdell 提问时间:2017-11-20 14:21 /
悬赏3ST金币已解决
请教下,请教下,关于lwip 轮询函数发送数据 ?

tcp_poll(tpcb,tcp_echoclient_poll,1);  //每秒中轮询2次,lwip最大一次只能够发送 1500-40 个字节,
那么我如果一共有20MB字节的数据需要发送,该如何处理啊 ???

/*
轮询函数,
*/
static err_t tcp_echoclient_poll(void *arg, struct tcp_pcb *tpcb)
{
        err_t ret_err;
        struct tcp_client_struct *es;
        es = (struct tcp_client_struct*)arg;

        if(es != NULL)  //连接处于空闲可以发送数据
        {
                if(ReadDataTxStatus())        //判断是否有数据要发送
                {
                        es->p=pbuf_alloc(PBUF_TRANSPORT, strlen((char*)tcp_client_sendbuf),PBUF_POOL);        //申请内存
                        pbuf_take(es->p,(char*)tcp_client_sendbuf,strlen((char*)tcp_client_sendbuf));        //将tcp_client_sentbuf[]中的数据拷贝到es->p_tx中
                        tcp_echoclient_send(tpcb,es);//将tcp_client_sentbuf[]里面复制给pbuf的数据发送出去
                        CLIENT_DATA_SEND_CLEAR_FLAG;        //清除数据发送标志
                        if(es->p)pbuf_free(es->p);        //释放内存
                }
    else if(es->state == ES_TCPCLIENT_CLOSING)
                {
                        tcp_echoclient_connection_close(tpcb,es);//关闭TCP连接
                }
                ret_err=ERR_OK;
        }
  else
        {
                tcp_abort(tpcb);//终止连接,删除pcb控制块
                ret_err=ERR_ABRT;
        }
        return ret_err;
}

最佳答案

查看完整内容

楼主现在的产品中是如何使用发送的?可能理解上有些不同,我认为需要发送信息的时候,可以写一个死循环就直接等待发送完毕,同时也要给其他的任务进行调度的时间。
收藏 评论8 发布时间:2017-11-20 14:21

举报

8个回答
回答时间:2017-11-20 14:21:08
楼主现在的产品中是如何使用发送的?可能理解上有些不同,我认为需要发送信息的时候,可以写一个死循环就直接等待发送完毕,同时也要给其他的任务进行调度的时间。
回答时间:2017-11-20 15:11:37
分包投吧,普通的单片机也不能有那么大的内存给用。
hpdell 回答时间:2017-11-20 16:20:24
本帖最后由 hpdell 于 2017-11-20 16:23 编辑
安 发表于 2017-11-20 15:11
分包投吧,普通的单片机也不能有那么大的内存给用。

你好,现在的问题是:

比如我有 一个1MB的数据量需要上传,每次发送 1024 Byte,刚好10次发完,但是这个 轮询函数是每秒钟系统只调用 2次,那么我这个1MB 的数据量,大概需要 5s 左右才能够发送完啊,感觉太慢了啊,有没有其他的什么好方法啊 ??
回答时间:2017-11-21 08:34:29
提高系统的调用率,但是也要考虑实际发送需要的时间。我不知道楼主用的是什么外设进行的数据传输。如果是以太网应该还能快。
hpdell 回答时间:2017-11-21 17:28:43
安 发表于 2017-11-21 08:34
提高系统的调用率,但是也要考虑实际发送需要的时间。我不知道楼主用的是什么外设进行的数据传输。如果是以 ...

你好,使用的 就是以太网啊,以太网的芯片是 LAN8742 , 如何调快系统的调用率啊 ??
uwyciw100 回答时间:2017-11-21 17:35:58
为什么不用udp_send去发送数据呢?
xxw-370311 回答时间:2017-11-22 11:19:08
如果你的发送进程优先级比较低,可以不考虑“同时也要给其他的任务进行调度的时间”,这个问题,高优先级任务时间到了,自然会运行的,死循环自然变为了非死循环。

有个配置文件,可以把1500改为1600,你可以试一下。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

风语者1991 回答时间:2018-1-15 17:05:36
如何判断这包数据是否发送完了啊?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版