STM32/STM8技术论坛
直播中

张雷

7年用户 208经验值
私信 关注
[问答]

基于STM32的IAP:FLASH里的标志位不能跳转到程序区2

最近在做基于STM32的IAP,我想把FALSH分为4个区,1个BOOT区(8002000H开始),2个应用程序区(1区:8002000H开始,2区:8008000开始),1个存储标志位的区(800F000H开始)。在BOOT里面通过读取FLASH里的标志位,来决定跳到应用程序区1还是跳转到应用程序区2。现在能够正常跳转到应用程序区1,不能跳转到应用程序区2,大致问题应该是中断向量表的问题。我应用程序里面的中断向量表设置也是通过读取FLASH标志位来设置,如果APP在1区,则设置为8002000H,在2区设置为8008000。keilc里面设置的编译段为8002000H。

请问哪里不对

回帖(11)

孙婷婷

2018-8-29 09:48:31
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
记得设置向量列表
举报

杨逊咏

2018-8-29 10:04:37
向量列表的地址也要写正确
举报

谢海莲

2018-8-29 10:13:54
设置了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);能够正常运行APPI,但是不能正常执行APP2啊,并且在Keilc里面也只能设置一个偏移地址啊
 
举报

张晓宁

2018-8-29 10:20:16
我晕,你一个芯片里面一个IAP两个APP,这个复杂度挺高的阿,围观你什么时候放弃。
举报

张晓宁

2018-8-29 10:36:37
劝你尽早放弃这种想法,否则光中断向量就够你受的
举报

陈敏

2018-8-29 10:47:57
两个app还是建立两个工程文件,放在同一个workspace里就行,这样keil设置方便
举报

康沧鹤

2018-8-29 11:02:26
有几种做法:1种是生成一个BOOT工程,再做一个应用工程,通过FLASH-ARM把两个HEX文件合并一下。另一种方法,把BOOT工程生成BIN文件。再把这个BIN文件转换成表格文件。以.H的形式加载到应用工程。
举报

袁沁茹

2018-8-29 11:15:14

你的两块应用程序,要按上图 进行设置。注意,有两处。
举报

王育来

2018-8-29 11:26:08
围观一下,看解决方案
举报

崔琳

2018-8-29 11:44:09
你的方法有点复杂,给你提个建议,希望能帮到你
 
1、2个APP分成两个工程,存储在Flash的不同位置,在Boot中运行APP,建议将APP拷贝到RAM中,然后让APP在RAM中运行,从而降低复杂度
2、如1所示,BOOT是、统一的,只是拷贝的源地址不一样,目标地址是相同的,向量表也是完全一样的,因为运行代码在同一个地址
3、APP只是代码的存储位置不一样,运行域是相同的,通过分散加载文件来控制。
不知能否帮到你
举报

李玉鑫

2018-8-29 11:49:39
想知道弄好了没啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分