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

请教下,请教下,关于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

查看全部评分

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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版