完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
STM32F环境下,利用webclient 通过4G AT socket下载较大(几十上百k)文件问题!
测试结果如下: 1、webclient没问题,因为通过Lwip的socket下载是没问题的 2、WEBCLIENT_RESPONSE_BUFSZ=4096, 即4K分片下载,首先发现recvfrom函数总是能够“立即”返回4096,无论数据是否接收到 3、继续跟踪发现:是函数at_recvpkt_get总是能够不正常地“迅速”得到4096 4、截图: 图中,表明当调用webclient_read==>recvfrom==>at_recvpkt_get后,此时socket里只有258+1400字节数据,但我们却“成功”得到了4096,原因是 bfsz_totle=825110831, page_pos=16645903 导致的,想问下这是个什么问题 5、在函数at_recvpkt_get里for循环末尾无条件加入break语句,则文件成功下载完成。 总结:git clone 工程,menuconfig 配置好后,竟然不能功能,而且还是这么深入的一个问题,这太折磨人了吧! |
|
相关推荐
3个回答
|
|
rlist 列表里的数据损坏了,可能是系统中其它地方的内存溢出,把列表数据污染了。
|
|
|
|
rtt从设计上、框架上、各种模块支持性上都应该国内领先了,必须表扬下。但是,我感觉并不好用,更有莫名的不稳定,比如随便想一个:
1 文件写write SD卡,会有一个不大不打小的概率会失败,磁盘太重要了,这问题我往哪里找啊! 2 i2c 的读写动作,网上清一色的绕过rt_device_write,都是直接调用的i2c虚拟驱动层的函数,这么个重要且小的问题愣是不解决!搞的我自己扩展了内核,又在设备层之上做了个api读写接口,如下: include "i2c_if.h" int i2c_if_read( rt_device_t i2c_dev, uint16_t slave_addr, uint16_t addr, uint16_t addr_len, // number of bytes, 1 or 2 void *buf, int len) { int ret; rt_off_t pos_flag, pos = slave_addr >> 1; if (addr_len == 2) addr = (addr >> 8) | (addr << 8); struct rt_i2c_bus_device *bus = (struct rt_i2c_bus_device *)i2c_dev->user_data; RT_ASSERT(bus); rt_mutex_take(&bus->lock, RT_WAITING_FOREVER); pos_flag = pos | (RT_I2C_NO_STOP << 16); if ((ret=rt_device_write(i2c_dev, pos_flag, &addr, addr_len)) == addr_len) { pos_flag = pos | (RT_I2C_FORCE_RESTART << 16); ret = rt_device_read(i2c_dev, pos_flag, buf, len); } rt_mutex_release(&bus->lock); return ret; } int i2c_if_write( rt_device_t i2c_dev, uint16_t slave_addr, uint16_t addr, uint16_t addr_len, // number of bytes, 1 or 2 const void *buf, int len) { int ret; rt_off_t pos_flag, pos = slave_addr >> 1; if (addr_len == 2) addr = (addr >> 8) | (addr << 8); struct rt_i2c_bus_device *bus = (struct rt_i2c_bus_device *)i2c_dev->user_data; RT_ASSERT(bus); rt_mutex_take(&bus->lock, RT_WAITING_FOREVER); pos_flag = pos | (RT_I2C_NO_STOP << 16); if ((ret=rt_device_write(i2c_dev, pos_flag, &addr, addr_len)) == addr_len) { pos_flag = pos | (RT_I2C_NO_START << 16); ret = rt_device_write(i2c_dev, pos_flag, buf, len); } rt_mutex_release(&bus->lock); return ret; } 基本的file I2c uart net socket io,一定要好用且稳定,必须是傻瓜式的。否则,带给用户的全是担心和不信任。 |
|
|
|
基本的file I2c uart net socket io,一定要好用且稳定,必须是傻瓜式的。否则,带给用户的全是担心和不信任.
稳定好用, 需要时间。 需要大家贡献力量。 先阶段, 我都是把用到的代码自己过一遍。 然后下个项目就可以接着用了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
806 浏览 0 评论
5158 浏览 0 评论
如何使用python调起UDE STK5.2进行下载自动化下载呢?
2666 浏览 0 评论
开启全新AI时代 智能嵌入式系统快速发展——“第六届国产嵌入式操作系统技术与产业发展论坛”圆满结束
3008 浏览 0 评论
获奖公布!2024 RT-Thread全球巡回线下培训火热来袭!报名提问有奖!
32178 浏览 11 评论
73214 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 08:16 , Processed in 5.567700 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号