gdb调试
-
- DEBUG CONSOIE
- SOLUTION
DEBUG CONSOIE
console:
Output radix now set to decimal 10, hex a, octal 12.
Input radix now set to decimal 10, hex a, octal 12.
Reset_Handler () at startup_stm32f103xb.s:69
69 ldr r2, =_sidata
Program stopped, probably due to a reset and/or halt issued by debugger
SOLUTION
{
"version": "0.2.0", "configurations": [ { "cwd": "${workspaceRoot}", "executable": "build/c8motorcontrol.elf", "name": "Debug with OpenOCD", "request": "launch", "type": "cortex-debug", **"runToEntryPoint": "main",** "servertype": "openocd", "configFiles": [ "D:/software/OpenOCD-20231002-0.12.0/share/openocd/scripts/interface/stlink.cfg", "D:/software/OpenOCD-20231002-0.12.0/share/openocd/scripts/target/stm32f1x.cfg" ] } ]
}
提示是reset handler ,在keil 中的runtomain 相当于 “runToEntryPoint”: “main”,
关于cubeMX生成的stm32f103C8T6代码无法调试的坑(STLINK)–HAL_Init中死循环
在使用cubeMX生成stm32f103C8T6代码的时候,遇到一个问题,就是如果直接烧录程序,程序可以正常运行,但是进入debug,程序就会一直在HAL_Init中循环,无法执行到后面的代码。 困在这个问题好几天,查找了网上的各种资料,没有能解决我问题的答案,于是自己研究,单步调试,一步一步看问题出在哪里,发现在HAL_Init函数中调用了HAL_MspInit后,程序就会跳转到RESET_Handler,然后再跳转到main函数,这就是HAL_Init不断死循环的原因。 于是我依次对HAL_MspInit中调用的函数进行注释,看看到底是哪个函数影响了debug功能,最终确定是**__HAL_RCC_PWR_CLK_ENABLE和__HAL_AFIO_REMAP_SWJ_NOJTAG**两个函数导致无法调试,我注释了这两句以后,keil就可以正常进入调试模式了。 总结:注释HAL_Init中HAL_MspInit中的__HAL_RCC_PWR_CLK_ENABLE和__HAL_AFIO_REMAP_SWJ_NOJTAG后可以正常进行调试。 注:如果注释了__HAL_AFIO_REMAP_SWJ_NOJTAG则烧录程序后需手动按下RESET按钮才可以正常运行程序,
“runToEntryPoint”: “main” 就可以不用手动reset