每次是部分下载 如图
【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去保存!是不是很不错啊!!!