打印
[开发工具]

能否使用 cubeide 从其他地址进行 Freertos 调试

[复制链接]
261|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HomeKit|  楼主 | 2025-4-24 10:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
正在使用 freertos 开发一个应用程序,在地址0x08000000 处我有一个引导加载程序,因此应用程序从地址 0x08004000 开始,因为在起始地址处有一个引导加载程序,所以我无法调试应用程序。在内部 cubeMX 生成的启动文件中将 VTOR 偏移更改为 0x4000,并且还在以下位置添加了启动 - 调试配置的“初始化命令”
set *0xe000ed08 = 0x4000 set $sp = *(unsigned int*)0x4000 set $pc = *(unsigned int*)0x4004 tbreak main
使用 jlink 或stlink_v2进行仿真。代码始终从地址 0x08000000 加载。
请教如何仿真应用程序?

使用特权

评论回复
沙发
公羊子丹| | 2025-4-25 07:37 | 只看该作者
你用的这些初始化命令是对的,不过CubeIDE有时候会自动load elf文件到默认地址,得在debug config里关掉load image选项。

使用特权

评论回复
板凳
周半梅| | 2025-4-25 07:38 | 只看该作者
你可以试试在Debug配置的Startup tab里取消勾选“Load image”然后用boot程序启动后Attach调试器,不然它会自动从0x08000000跑。

使用特权

评论回复
地板
帛灿灿| | 2025-4-25 07:38 | 只看该作者
关键是在不破坏boot的前提下attach目标,要记得用“Connect under reset”,否则STM启动会被打断。

使用特权

评论回复
5
童雨竹| | 2025-4-25 07:39 | 只看该作者
如果你用ST-Link,Debug配置里把“Reset behavior”改成“Hardware reset”效果会更稳定。

使用特权

评论回复
6
万图| | 2025-4-25 07:40 | 只看该作者
试试把gdb初始化命令里地址都改成绝对地址:set $sp = *(unsigned int*)0x08004000 这样可能更靠谱。

使用特权

评论回复
7
Wordsworth| | 2025-4-25 07:41 | 只看该作者
我之前遇到类似问题,把boot和app都编进一个bin然后分别跳转,调试更方便些,但不适合你这种分开烧写的方案。

使用特权

评论回复
8
Bblythe| | 2025-4-25 07:42 | 只看该作者
你有没有确认你的.ld文件把Flash origin也设在0x08004000了?不然gdb load和符号对不上也会调错地方。

使用特权

评论回复
9
Pulitzer| | 2025-4-25 07:43 | 只看该作者
如果想断点调main,建议加tbreak main前加个延时或者while(1)等boot跳完再进app,否则可能调试器连不上。

使用特权

评论回复
10
Uriah| | 2025-4-25 07:44 | 只看该作者
JLink的话你也可以试试用JLink Commander先halt芯片然后attach,再进CubeIDE里点Debug,会稳定很多。

使用特权

评论回复
11
Clyde011| | 2025-4-25 07:45 | 只看该作者
如果实在不行,也可以考虑用两个project,一个boot一个app,app设置为attach-only,手动连接调试。

使用特权

评论回复
12
laocuo1142| | 2025-4-25 12:40 | 只看该作者
建议在应用程序开头添加一段初始化代码,手动设置VTOR和堆栈指针

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

15

帖子

0

粉丝