我只是在写一些测试程序,以便了解STM32F4 (ARM Cortex M4)。我使用的开发板在flash中预装了U-Boot。当板启动并运行时,U-Boot显示它的命令提示符,
- 我正在通过JTAG连接OpenOCD+GDB
- 加载我的二进制图像到RAM (OpenOCD:
load_image
) - reset the CPU (OpenOCD:
重新初始化
) - 并设置PC到我想运行的位置(GDB:
设置电脑= 0 x2000001d美元
) - 和运行(GDB:
继续
)
这个问题
大多数情况下,这是正常的。然而,有几次我遇到了这样的问题,当CPU处于RUNNING状态时,OpenOCD突然显示这个消息:
错误:jtag状态包含无效的模式值-通信失败轮询目标stm32f4x。cpu失败,GDB将被停止。在100ms内再次轮询
如果我的观察是正确的,只有当
- 我在用重置按钮重置开发板
- 然后在这时出现的U-Boot提示符中输入一些东西。
当代替U-Boot的一些其他程序出现在flash中,这个问题似乎不会发生。
我的假设
目前我假设这是由U-Boot写入RAM位置引起的继续
命令。我不知道怎么做继续
确实有效,但我的理论是,这个命令会以某种方式影响调试电路,因此写入RAM地址会导致问题。
当我的其他程序在flash中出现时,一切工作正常。即使按下重启键也能起作用。我认为这是因为它的内存占用非常小,因此0x2000001d不受影响。
我的问题
- 是什么
继续
到底做什么?除了将CPU设置为运行模式,还有什么其他的功能吗?它会以某种方式影响断点吗? - 我上面解释的假设有道理吗?