circlegan 发表于 2024-1-16 18:20:33

stm32h743修改中断向量偏移地址后,程序跑飞

      在STM32H743上加了一个bootloader,跳转程序如下图所示。bootloader占用了第0个扇区,大小为0x20000。
      

下图是分散加载设置




   然后APP程序将中断偏移地址设置成了0x20000。调试bootloader时,是可以看到程序有进行跳转动作的,但应用程序没有启动成功。后面再调试应用程序,发现启动后LDR就直接指导了0x080002C8,这个地址应该是属于bootloader了吧。
    再将APP程序中断偏移地址改为0,IROM1改回到0x0800000后,程序就是运行正常的。
    不知到为什么会出现这种情况,按理H7应该是可以在Flash的任意地址运行的吧?有没有遇到类似情况的啊,求指导!!




cctv180 发表于 2024-1-16 21:42:08

SCB->VTOR 寄存器配置了么

庄永 发表于 2024-1-16 23:17:55

跳转前有没有清理bootloader用到的外设和堆栈?

eric2013 发表于 2024-1-17 08:40:25

你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下

https://img.anfulai.cn/dz/attachment/forum/202210/23/123834w5a77q06851m3z1n.png

circlegan 发表于 2024-1-17 11:42:43

cctv180 发表于 2024-1-16 21:42
SCB->VTOR 寄存器配置了么

配置了,加了0x20000

circlegan 发表于 2024-1-17 11:47:04

eric2013 发表于 2024-1-17 08:40
你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下

请问这个具体要怎么改啊,麻烦发一下链接,谢谢哈。
另外,我将bootloader重新复制一份做了app程序,也把中断向量偏移,分散加载这些做了修改,发现调试的时候也是出现了上面的问题,LDR指向了0x080002C8,没法进入SystemInit函数。估计这个问题是出在了bootloader的跳转那里了。

circlegan 发表于 2024-1-17 11:51:58

庄永 发表于 2024-1-16 23:17
跳转前有没有清理bootloader用到的外设和堆栈?

外设时钟,中断之类的都关闭了

circlegan 发表于 2024-1-17 15:19:51

eric2013 发表于 2024-1-17 08:40
你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下

谢谢大神,跳转成功了。
开始还不知道这里要具体怎么改,后来用CUBEIDE重新搞了个工程,一模一样的代码,跳转没有任何问题,上面的app也能正常运行。
之前在keil上调试时,发现执行完__set_MSP(*(__IO uint32_t*)app_addr);语句后,变量就都被清零,当时不太确定这里是不是有问题。然后在cubeide上调试发现变量没有清零,那么问题应该就是出在这里了。然后按大神的方法,把局部变量jump_addr和JumpToApp,改成全局变量就OK了,再次感谢大神!!!
页: [1]
查看完整版本: stm32h743修改中断向量偏移地址后,程序跑飞