SIM800C做HTTP下载的问题

每次是部分下载 如图


【GET /api1/v1/packages/Entrance_Guard/Touch/e2bbbf63a5e5c182f8d1db9731b94474/OTA.bin HTTP/1.1
Host: 47.103.134.150:8445
Range: bytes=1024-2048

】

看到模块接受数据:

这样就是正常的 我需要多少 模块给我多少 我要1024他给我1446这样的【他又自己的链路】

但是也有!

这就是类似蓝牙你需要自己去组包了

 

写到这里 

不如那样 我一句话下载 看看

那样的话我自己RX就好了 不要每次TX!

【不好是模块一次给你4K5K过来你就溢出死机了 但是看样子 这个模块没有这么强大】

换个分支再来吧 一句话方式

 

 

+++++++++++++++++++分析++++++++++++++

为什么会突然很快很快的过来2个消息  几乎让我处理不过来

我想这个是模块性能决定的  你需要1024个字节

结果它收到1024 它一次只给你964个 还有一些字节它马不停蹄继续给你 所以很着急

你可以怎么办?

1--和埃士一样 只要512个 不要太多 不然就是上面的结果 你挑战它的性能上限了

2--我不苛求长度 就是一句话下载 你爱给多少就给多少 它也不着急

尝试方法2

 

 

怎么解决呢?

方式1:

现在的问题每次过来2个太快 后面的被memset
我控制一下 不要马上发出信号量 我等被处理完毕以后在发出
就是说话你一句 我一句
修改如下:
                if(id== (GSOCKET_CONNECT_MAX-1) )//OTA链路单独话
                {
                    if( xSemaphoreTake( xOTADONESemaphore, 1000 ) == pdTRUE )//os起来的时候发一个 处理完毕以后在发一个
                    {
                        memcpy(socket->msg+socket->len , data ,len);
                        socket->len += len;
                        xSemaphoreGive( xOTACOMESemaphore );//发出消费者
                    }
                }
                else
                {
                    memcpy(socket->msg+socket->len , data ,len);
                    socket->len += len;
                }
这样可以看到可以work

生产者 消费者 彼此都有锁  当我准备发消息说;我RX好了 你来拿吧的时候我先等等 等待锁的拿到

也就是标识对方不是在忙 而是在空闲的 的这个  硕

这样我发消息 它才可以继续处理

 

这样比较简单 我希望做一个高级的

我已经知道了HTTP一句话下载的奥义 就是我只发一句话 对方给我回答若干次 而且只有第一个会包含http的头部字符串

【而多次部分下载是需要不断的TX-RX交互 每次都有http头部字符串 它好处是可以断点续传】

我可以这样

第一次我TX要0-7这样8个HEX过来

我的目的是拿到http头部字符串的长度 随便看看bin最开始的8个HEX[当然没啥鸟用就是看看]

我可以用总长减去8 那就是http头部的字段长度了!比如是189

然后我重新初始化串口的接收 用FIFO 以后每次过来就放到FIFO

而我的任务是读FIFO

第一次我读FIFO是189就OK 读好了 也就是丢弃掉

从此以后我就是每次读4096就OK 这样我每次就拿走4K去保存!是不是很不错啊!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值