[开发工具] 能否使用 cubeide 从其他地址进行 Freertos 调试

[复制链接]
610|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启动会被打断。
童雨竹 发表于 2025-4-25 07:39 | 显示全部楼层
如果你用ST-Link,Debug配置里把“Reset behavior”改成“Hardware reset”效果会更稳定。
万图 发表于 2025-4-25 07:40 | 显示全部楼层
试试把gdb初始化命令里地址都改成绝对地址:set $sp = *(unsigned int*)0x08004000 这样可能更靠谱。
Wordsworth 发表于 2025-4-25 07:41 | 显示全部楼层
我之前遇到类似问题,把boot和app都编进一个bin然后分别跳转,调试更方便些,但不适合你这种分开烧写的方案。
Bblythe 发表于 2025-4-25 07:42 | 显示全部楼层
你有没有确认你的.ld文件把Flash origin也设在0x08004000了?不然gdb load和符号对不上也会调错地方。
Pulitzer 发表于 2025-4-25 07:43 | 显示全部楼层
如果想断点调main,建议加tbreak main前加个延时或者while(1)等boot跳完再进app,否则可能调试器连不上。
Uriah 发表于 2025-4-25 07:44 | 显示全部楼层
JLink的话你也可以试试用JLink Commander先halt芯片然后attach,再进CubeIDE里点Debug,会稳定很多。
Clyde011 发表于 2025-4-25 07:45 | 显示全部楼层
如果实在不行,也可以考虑用两个project,一个boot一个app,app设置为attach-only,手动连接调试。
laocuo1142 发表于 2025-4-25 12:40 | 显示全部楼层
建议在应用程序开头添加一段初始化代码,手动设置VTOR和堆栈指针
您需要登录后才可以回帖 登录 | 注册

本版积分规则

56

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部