电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
stm32如何将flash分为三个区用来做在线升级?
已解决
73482
个问题
已帮助
5993
位优秀工程师
stm32如何将flash分为三个区用来做在线升级?
13060939415
2018-04-21
浏览量:2816
现在的想法是将32的flash分为三个区,分别是BootLoader区,程序备份区和运行区,在在线升级时将程序升级到备份区,当升级完成后,再将备份区的程序拷到运行区运行,如果升级失败则直接运行运行区,这样就保证了在线升级失败也可以使程序正常运行老版本,对于这种想法,大家有没有好的建议或者例程。
显示全部
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
846ed4e9e9f1a3e1
完全可以,我现在就是这么做的。IAP程序放在0地址,开机运行,用标志位判断是否需要升级,需要升级则拷贝备份区的程序到运行区,然后跳转到运行区,否则直接跳转到运行区。运行区的首地址根据IAP程序的大小来确定,取整数K的地址。程序空间不足也可以外挂EEROM来存储升级数据。
发布于
2018-04-22
举报
评论 0
0
0
其他答案
数量:
13
STM64
直接用0x00000位址分区,到8M左右一个区,然后后面随便分
发布于
2018-04-21
举报
评论 0
0
0
Linux小学童
http://www.openedv.com/forum.php?mod=viewthread&tid=267436,这里面有个同样问题。是可以将FLASH分成几个区,用来升级程序用,而且有保障措施,避免升级失败无法工作的情况
发布于
2018-04-21
举报
评论 0
0
0
菜鸟冷虎
地址分区就行,用指针进行地址的跳转
发布于
2018-04-21
举报
评论 0
0
0
@曲终人散@
分区是软件定义的,这个根据你自己的需求来做
发布于
2018-04-21
举报
评论 0
0
0
我是假管贴胸小助手
这样是可以的,但是要将片内的flash划分区域的话,必须要按照flash的页地址划分,小容量和中容量的flash的每页只有1k大小,大容量的flash每页是2k大小(这是以103来说的)。你的IAP程序和APP程序在你新建工程后可以在工程管理面板设置你的程序代码存放处,至于备份区域你只要预留出多余的flash空间后,使用flash函数库直接读写操作就好了。
发布于
2018-04-22
举报
评论 0
0
0
汉云
完全可以实现的,只是你的程序不可以太大了,要满足STM32的Flash大小的分配。boot可能会比较小,但是其他两个区的大小 应该是一样大的。
发布于
2018-04-22
举报
评论 0
0
0
明有几时有
这个方式真的是很妙啊。很受启发。
关键应该是要选择flash很大的芯片,不可太小,否则存不下这三段的程序
发布于
2018-04-22
举报
评论 0
0
0
勇哥来巡山
将地址进行分区处理,使用不同的地址存放不同的升级数据,升级的时候进行校验,校验没有问题的话直接指针跳转运行
发布于
2018-04-23
举报
评论 0
0
0
lichangle
这种方法比较合理,注意空间大小要分配正确
发布于
2018-04-23
举报
评论 0
0
0
chen0000009
可以的,在bootloader那里加一个跳转就行,不过要注意程序不要写越界
发布于
2018-04-23
举报
评论 0
0
0
donatello
理论上可行,修改BOOTloader增加跳转信息就好了,但实际上ST的芯片中的FLASH有专门一段数据是给系统调用的,用户绝对不能修改,否则芯片会坏。
发布于
2018-04-24
举报
评论 0
0
0
我是假管贴胸小助手
在你新建工程之后,去工程管理面板修改代码的存储范围就好了。
发布于
2018-04-25
举报
评论 0
0
0
US
你需要制作适合你自己的bootload就可以实现
发布于
2018-04-30
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
stm32如何将flash分为三个区用来做在线升级?
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: