ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32F4] STM32函数在线升级,或者在线添加函数(不用改整个工程)

[复制链接]
3535|10
跳转到指定楼层
楼主
本帖最后由 邪乎风云 于 2019-7-21 08:37 编辑

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

上位机第一步从  MCU中读取当前将要保存程序的首地址
第二步    计算代码量,将下一次更新的代码首地址给MCU保存
第三步   通知MCU将当前首地址保存并且赋值给函数指针
第四步 更新所需要更新的函数代码
第五步 通知MCU修改函数指针运行的step_**,启动函数运行



如图首先将连个函数不编译,直接用烧录器烧录到MCU中


然后修改上图中的一个宏定义  ,编译生成hex,然后用上位机读取hex文件,并且提取需要更新的函数内容



然后点击烧录按钮,LED灯开始闪烁


继续修改代码里面的宏定义 ,编译生成hex,同样然后用上位机读取hex文件,并且提取需要更新的函数内容,并且修改上位机中的 程序ID,然后点击烧录(代码提取的地址相同,烧录到MCU中是变化的如图所示)



效果是灯闪烁同时串口也打印

评论

lihui567 2019-7-31 07:03 回复TA
上位机用VS写 
沙发
 楼主 | 2019-7-19 12:24 | 只看该作者
后面发工程代码和上位机代码(目前上传空间不够了)
板凳
 楼主 | 2019-7-21 08:28 | 只看该作者
本帖最后由 邪乎风云 于 2019-7-24 16:10 编辑

目前只有单片机的代码,里面内容其实只有串口和LED灯,简单容易看,上位机是生产的exe文件,这次上位机代码还是发不了,下次发上位机是用VS10的MFC制作的

UartUpdateFW.zip

1。97 MB, 下载次数: 24

Mcu_407.zip

1。53 MB, 下载次数: 22

地板
| 2019-7-21 17:44 | 只看该作者
5
 楼主 | 2019-7-22 13:18 | 只看该作者
上位机代码

UartUpdateFW.zip

pk10网投代理41.17 KB, 下载次数: 23

评论

邪乎风云 2019-7-23 13:06 回复TA
上位机串口接收部分需要加个延时,有的时候会出现接收不全 
6
| 2019-7-31 07:02 | 只看该作者
这个单片机是407.分享的非常不错,这个远程在线升级可以参考
7
| 2019-8-1 15:35 | 只看该作者
这功能实现上不会说太难,UDS诊断服务就可以实现这个功能。楼主怎么考虑安全问题呢?你的函数是否会造成内存泄漏,溢出,或指针跑飞等。
8
| 2019-8-2 16:55 | 只看该作者
thanks!
9
 楼主 | 2019-8-5 09:46 | 只看该作者
JasonLee27 发表于 2019-8-1 15:35
这功能实现上不会说太难,UDS诊断服务就可以实现这个功能。楼主怎么考虑安全问题呢?你的函数是否会造成内 ...

这些问题是得考虑,不过这个只是一个例子,觉得写得简单点方便后面看和使用
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表
宁夏11选5开奖结果 江西11选5开奖 辽宁11选5开奖 浙江快乐12走势 浙江体彩6+1开奖 辽宁11选5走势图 江西11选5开奖 黑龙江11选5开奖 pk10网投代理 浙江快乐12走势