分享到:
之前做过DFU在线升级,后来自己利用ESP8266和串口做了一个远程升级的工具,都需要建立两个工程,而且更新东西较多,需要擦除flash,然后一点一点的把数据传进去现在想到一种单纯的更新函数的方法(有点类似官方给的虚拟EEPROM的想法),不需要更新所有的代码,如果扇区的空间用完了可以进行擦除,否则不用擦除,目前实验测试OK(程序中只是闪灯和串口打印,代码比较小,所以没有做后续的flash空间不足的情况)缺点:如果当前工程中函数中只能调用之前现有的函数,否则需要整个工程的程序都得更新
具体思路如下:
首先建立一个工程,里面会用到EEPROM来记录程序中会用到的代码地址然后写一个调用函数的指针指向添加的函数地址,同时使用一个step_**作为标记位判断是否运行添加的函数工程里面后面可能需要变动的那个函数先不编译,生成的代码烧录进去
然后编译包含需要运行的函数的代码,需要将此函数的起始地址固定到某个位置,生成的hex方便上位机提取
然后烧录这个函数以及让函数运行就交给上位机了
上位机第一步从 MCU中读取当前将要保存程序的首地址
第二步 计算代码量,将下一次更新的代码首地址给MCU保存
第三步 通知MCU将当前首地址保存并且赋值给函数指针
第四步 更新所需要更新的函数代码
第五步 通知MCU修改函数指针运行的step_**,启动函数运行
具体思路如下:
首先建立一个工程,里面会用到EEPROM来记录程序中会用到的代码地址然后写一个调用函数的指针指向添加的函数地址,同时使用一个step_**作为标记位判断是否运行添加的函数工程里面后面可能需要变动的那个函数先不编译,生成的代码烧录进去
然后编译包含需要运行的函数的代码,需要将此函数的起始地址固定到某个位置,生成的hex方便上位机提取
然后烧录这个函数以及让函数运行就交给上位机了
上位机第一步从 MCU中读取当前将要保存程序的首地址
第二步 计算代码量,将下一次更新的代码首地址给MCU保存
第三步 通知MCU将当前首地址保存并且赋值给函数指针
第四步 更新所需要更新的函数代码
第五步 通知MCU修改函数指针运行的step_**,启动函数运行
(0 )
(0 )


发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖