[STM32] 类似差分升级的原理

[复制链接]
192|3
 楼主 | 2019-1-6 08:15 | 显示全部楼层 |阅读模式
问题背景:
目前zigbee无线可以通过无线给芯片的固件进行OTA升级,一个固件包就是200K+,想把一个固件分成两部分,公共基础的部分,比如驱动、底层Zigbee协议的网络层、APS层、ZDP、ZCL;这些基本不做修改的部分想直接固化到芯片中,到时候升级就只升级应用业务逻辑部分在代码,这样减少固件大小,提高升级效率。

提前固化的部分与应用业务代码在编译的时候应该是分开编译的,但是怎么做到他们作为一个完整的固件在一起运行呢?运行时候应用代码可以调用提前固化的部分中的函数。

我了解的像mw300把WIFI和应用分成两个固件分开烧录,他们之间的通信?
1、函数调用是通过编译约定函数的编译地址,应用固件调WIFI其实是调约定好的地址,ram全部变量呢?

有了解的大神多多指导
| 2019-1-7 10:59 | 显示全部楼层
就是把驱动当做共享库,把函数名导出来,链接文件链接的时候直接指向驱动地址。
最简单的方法,你把驱动函数赋值给函数指针,函数指针数组放到指定地址,你应用程序用的时候用个for循环加载这个地址的数据(这个地址可以用宏转一下就可以了,你也可以弄成结构体,表明函数名,函数个数等),因为指针长度是固定的,所以直接遍历即可。

| 2019-1-7 13:27 | 显示全部楼层
底层 固化函数一定不要调用其他 库
| 2019-1-7 13:27 | 显示全部楼层
底层 固化函数一定不要调用其他 库
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /3 下一条

快速回复 返回顶部 返回列表