黄金会员
主题
帖子
积分8659
阅读权限40
注册时间2011-12-12
最后登录1970-1-1
在线时间 小时
|
本帖最后由 aimowei 于 2017-3-16 16:47 编辑
项目需要用到远程升级。由于设备是通过BLE模块连接到手机, 因此就想着直接用BLE传输升级固件。
现在遇到了问题。 BLE模块速度超级慢。慢到大约只有0.5KB/s,程序大小超过500KB。
如果每次都完整传输整个固件,那么升级的过程时间太长, 而且手机端容易断开(每次大约传输到200KB就一定会断开)。。
不知道大家有没有什么好办法(在不修改硬件的前提下)
我自己想了一个方案,但是实现起来没头绪,而且也不知道是否行得通。就怕做无用功。
具体想法如下:
1,把程序所有的.c 文件均 编译到固定地址(Basic Aaddr)
2,把所有的 函数(static 的除外),也编译到固定地址(Fun Addr =Basic Aaddr + Offset Addr)
3,写一个上位机软件,每次发布更新时,用这个上位机软件提最新固件与上一版固件之间的差异,并按固定格式输出升级文件 update.bin
4,修改下位机BootLoader,按update.bin 更新有变化的部分
这样理论上,每次编译后,有变化的部分应该不会特别多。应该只会修改1个或者2个flash Block,可以大大缩小更新文件。提高传输速度和稳定性。
那么问题又来了。
这样做,是否可行。 关于 rw zi 相关区域是否也需要固定地址?
或者有谁有相关经验,能告诉我有其他方法实现也好。
|
|