完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在做基于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个回答
|
|
|
|
|
|
向量列表的地址也要写正确
|
|
|
|
设置了NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);能够正常运行APPI,但是不能正常执行APP2啊,并且在Keilc里面也只能设置一个偏移地址啊
|
|
|
|
我晕,你一个芯片里面一个IAP两个APP,这个复杂度挺高的阿,围观你什么时候放弃。
|
|
|
|
劝你尽早放弃这种想法,否则光中断向量就够你受的
|
|
|
|
两个app还是建立两个工程文件,放在同一个workspace里就行,这样keil设置方便
|
|
|
|
有几种做法:1种是生成一个BOOT工程,再做一个应用工程,通过FLASH-ARM把两个HEX文件合并一下。另一种方法,把BOOT工程生成BIN文件。再把这个BIN文件转换成表格文件。以.H的形式加载到应用工程。
|
|
|
|
|
|
|
|
围观一下,看解决方案
|
|
|
|
你的方法有点复杂,给你提个建议,希望能帮到你
1、2个APP分成两个工程,存储在Flash的不同位置,在Boot中运行APP,建议将APP拷贝到RAM中,然后让APP在RAM中运行,从而降低复杂度 2、如1所示,BOOT是、统一的,只是拷贝的源地址不一样,目标地址是相同的,向量表也是完全一样的,因为运行代码在同一个地址 3、APP只是代码的存储位置不一样,运行域是相同的,通过分散加载文件来控制。 不知能否帮到你 |
|
|
|
想知道弄好了没啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
自定义系统时钟频率后,用库函数和微带两种方式点亮LED灯,为什么灯的闪烁频率不一致?
779 浏览 2 评论
955 浏览 2 评论
1902 浏览 0 评论
【嵌入式SD NAND】基于FATFS/Littlefs文件系统的日志框架实现
695 浏览 0 评论
求助!STM32F4单片机编程与设计sEMG信号采集电路问题
877 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 20:02 , Processed in 0.732546 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号