如何用spring boot 搭建ota 服务器

发布于 2020-03-30 18:27:21    浏览:383
硬件是stm32和esp8266。
我的固件是以二进制形式存在mysql里的。服务器用springboot编写,把固件以byte[]读出来response.getOutputStream().write();写到response里。但是rtthread报
[E/at.skt.esp] no memory receive buffer(1460).
[E/at.clnt] read line failed. The line data length is out of buffer size(1024)!

我理解是因为我把整个文件都传下去了,stm32的buffer不够大。那是不是服务端需要实现分片下载。rtthread是怎么请求的呢?

查看更多

7 个回答
921742079
921742079 2020-03-30
This guy hasn't written anything yet
为什么要把固件用blob的模式存mysql。。。。。。。。。。太可怕了,错误原因看起来似乎是缓冲区默认就1024,不过你可以试试直接给一个固件的url,然后stm32板测试一下ota,固件再小,存数据库也看起来并不算很好的设计吧?
zhao_gx
zhao_gx 2020-03-31
This guy hasn't written anything yet
懒得搞静态文件服务了。。。反正也不会经常改固件,一共也存不了几条,就用Mysql 将就了。
另外我今天用nginx搭了个文件服务,报一样的问题。所以不是我服务器端的问题是吧。
zhao_gx
zhao_gx 2020-03-31
This guy hasn't written anything yet
921742079 发表于 2020-3-30 22:28
为什么要把固件用blob的模式存mysql。。。。。。。。。。太可怕了,错误原因看起来似乎是缓冲区默认就1024, ...


懒得搞静态文件服务了。。。反正也不会经常改固件,一共也存不了几条,就用Mysql 将就了。
另外我今天用nginx搭了个文件服务,报一样的问题。所以不是我服务器端的问题是吧。
zhao_gx
zhao_gx 2020-03-31
This guy hasn't written anything yet
921742079 发表于 2020-3-30 22:28
为什么要把固件用blob的模式存mysql。。。。。。。。。。太可怕了,错误原因看起来似乎是缓冲区默认就1024, ...


另外没太明白你说的测试方法,怎么直接给一个固件的url。缓冲区设置成多大合适呢。
zhao_gx
zhao_gx 2020-03-31
This guy hasn't written anything yet
921742079 发表于 2020-3-30 22:28
为什么要把固件用blob的模式存mysql。。。。。。。。。。太可怕了,错误原因看起来似乎是缓冲区默认就1024, ...


我debug发现是rt_calloc失败了。。。64k的内存用不了ota么。。。我的固件现在260k
aozima
aozima 2020-03-31
拒绝白嫖,拒绝键盘侠!
260K保存在哪? 如果是保存在FLASH,那只要FLASH的空间够就行了。

如果你是直接保存在64K里面,那明显是不行。
我想应该你的设计应该不会是这样的。
那么,检查下是否有内存泄露。
921742079
921742079 2020-04-01
This guy hasn't written anything yet
zhao_gx 发表于 2020-3-31 10:08
另外没太明白你说的测试方法,怎么直接给一个固件的url。缓冲区设置成多大合适呢。 ...


静态文件存储方式和存mysql和你这个错误关系不大,就是觉得很奇怪
然后单片机上存的话,估计得看flash空间了吧?划分单独的区存固件,然后升级或者外挂flash吧

撰写答案

请登录后再发布答案,点击登录
关注者
0
被浏览
383

发布
问题

分享
好友

手机
浏览

扫码手机浏览