sheepy_chan 发表于 2023-3-22 11:39:10

求助,H7B0程序放在外部flash,gdb无法打断点

各位大佬好!
本人在用STM32H7B0调试的时候,boot放在内部flash(0x08000000),启动后OSPI初始化外部flash(W25Q64),并且设置为内存映射模式到 0x90000000,然后跳转到 0x90000000运行;
程序跑起来都没啥问题,但是我用gdb调试的时候,打上断点,就提示这个:

但是我直接读该地址,又是可以读出来的:


随后我不用boot,直接把程序减小(小于128k),烧写到内部flash上,就可以运行并且正常打断点调试。
请问有碰到类似情况的朋友吗?
还有另外再问一下,我看到说H7B0虽然手册上说内部flash为128k,但是实际上有2M,我试过将我的程序(约将近300k)烧写到内部flash上,可以烧写成功,但是程序跑不起来;
请问有大于128k的程序放在内部flash上跑成功的先例么?
谢谢大家!!~~

eric2013 发表于 2023-3-22 11:50:46

你的外置Flash算法文件应该不支持在外部Flash做程序调试。

支持外部调试,要做好内存映射支持。

zbianbiaos 发表于 2023-3-22 14:26:32

在外部FLASH初始化完成之后打第一个断点,这时候应该还在内部ROM里面,外部FLASH映射也完成,可以通过总线访问外部FLASH
然后就可以在映射的代码段上打断点了吧
想方便点的话写一个gdbinit文件自动打第一个断点

sheepy_chan 发表于 2023-3-22 14:40:19

eric2013 发表于 2023-3-22 11:50
你的外置Flash算法文件应该不支持在外部Flash做程序调试。

支持外部调试,要做好内存映射支持。

感谢回复!但是我在keil里调试就可以打上断点,gdb就不行,并且在boot里已经通过HAL库的HAL_OSPI_MemoryMapped开启了内存映射,不然程序也跳不到0x90000000执行。
以上是不是可以理解为映射成功?
还是说gdb需要再次单独映射?

sheepy_chan 发表于 2023-3-22 15:50:00

zbianbiaos 发表于 2023-3-22 14:26
在外部FLASH初始化完成之后打第一个断点,这时候应该还在内部ROM里面,外部FLASH映射也完成,可以通过总线 ...

我在boot里,映射结束后,跳转到外部flash代码之前,打上了断点,然后在这个断点停下来的时候,在外部flash代码段上打了个断点,然后c,问题还是依旧{:20:}

eric2013 发表于 2023-3-23 01:38:11

sheepy_chan 发表于 2023-3-22 15:50
我在boot里,映射结束后,跳转到外部flash代码之前,打上了断点,然后在这个断点停下来的时候,在外部fla ...

你现在的GBD调试用的什么方案,openocd? 然后又整个那个基于gcc的外部算法?

sheepy_chan 发表于 2023-3-23 11:44:39

eric2013 发表于 2023-3-23 01:38
你现在的GBD调试用的什么方案,openocd? 然后又整个那个基于gcc的外部算法?

是openocd,没有基于gcc的外部算法,只有一个keil上用的FLM下载算法,并在boot中开启外部flash的地址映射,没有单独给调试器的外部算法

eric2013 发表于 2023-3-24 10:16:56

sheepy_chan 发表于 2023-3-23 11:44
是openocd,没有基于gcc的外部算法,只有一个keil上用的FLM下载算法,并在boot中开启外部flash的地址映射 ...

这种玩法没整过。

zhangqi-9278 发表于 2024-4-1 12:48:07

楼主问题解决吗
页: [1]
查看完整版本: 求助,H7B0程序放在外部flash,gdb无法打断点