stm32h743修改中断向量偏移地址后,程序跑飞
在STM32H743上加了一个bootloader,跳转程序如下图所示。bootloader占用了第0个扇区,大小为0x20000。下图是分散加载设置
然后APP程序将中断偏移地址设置成了0x20000。调试bootloader时,是可以看到程序有进行跳转动作的,但应用程序没有启动成功。后面再调试应用程序,发现启动后LDR就直接指导了0x080002C8,这个地址应该是属于bootloader了吧。
再将APP程序中断偏移地址改为0,IROM1改回到0x0800000后,程序就是运行正常的。
不知到为什么会出现这种情况,按理H7应该是可以在Flash的任意地址运行的吧?有没有遇到类似情况的啊,求指导!!
SCB->VTOR 寄存器配置了么 跳转前有没有清理bootloader用到的外设和堆栈? 你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下
https://img.anfulai.cn/dz/attachment/forum/202210/23/123834w5a77q06851m3z1n.png
cctv180 发表于 2024-1-16 21:42
SCB->VTOR 寄存器配置了么
配置了,加了0x20000 eric2013 发表于 2024-1-17 08:40
你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下
请问这个具体要怎么改啊,麻烦发一下链接,谢谢哈。
另外,我将bootloader重新复制一份做了app程序,也把中断向量偏移,分散加载这些做了修改,发现调试的时候也是出现了上面的问题,LDR指向了0x080002C8,没法进入SystemInit函数。估计这个问题是出在了bootloader的跳转那里了。 庄永 发表于 2024-1-16 23:17
跳转前有没有清理bootloader用到的外设和堆栈?
外设时钟,中断之类的都关闭了 eric2013 发表于 2024-1-17 08:40
你用的是不是AC6,这个是之前问题的记录,你将你的两个局部变量设置为全局变量看下
谢谢大神,跳转成功了。
开始还不知道这里要具体怎么改,后来用CUBEIDE重新搞了个工程,一模一样的代码,跳转没有任何问题,上面的app也能正常运行。
之前在keil上调试时,发现执行完__set_MSP(*(__IO uint32_t*)app_addr);语句后,变量就都被清零,当时不太确定这里是不是有问题。然后在cubeide上调试发现变量没有清零,那么问题应该就是出在这里了。然后按大神的方法,把局部变量jump_addr和JumpToApp,改成全局变量就OK了,再次感谢大神!!!
页:
[1]