Cortex-M4调试状态设置PC后,如何退出调试并从指定地址启动?
Cortex-M4调试状态下从指定PC启动的实现方法
关于VECTRESET的误区
不要使用VECTRESET位!触发向量复位后,CPU会强制从0x0地址加载主栈指针(MSP)、从0x4地址加载复位向量(PC值),直接覆盖你之前手动设置的PC,回到默认复位启动流程,完全无法实现从指定地址启动的需求。
正确操作步骤
在完成ARM论坛所述的准备工作(设置MSP到RAM栈顶、PC指向测试代码入口、xPSR设为0x01000000、测试代码已写入可执行内存)后,按以下步骤退出调试并启动:
- 清除
DHCSR寄存器的VECTRESET_CATCH位,防止后续操作意外触发复位捕获,导致CPU重新进入调试状态。 - 清除
DHCSR寄存器的DEBUGEN位,这会让CPU退出调试暂停模式,直接从你预先设置的PC地址开始执行代码。
关键注意点
- 必须确保
xPSR的EPSR.T位已置1(值为0x01000000),Cortex-M4是纯Thumb指令架构,该位未正确设置会导致CPU进入故障状态。 - 测试代码所在的内存区域必须同时具备可写和可执行属性,避免触发MPU(内存保护单元)或总线错误。
内容的提问来源于stack exchange,提问作者cher
相关产品推荐
相关产品推荐

