也许一次尝试一步。
启动 openocd,可能类似于 -f interface/jlink.cfg -f target/lpc1768.cfg 或其他什么,听起来你已经可以工作了。
第二个 telnet localhost 4444 或任何 Windows 命令行(类似的东西)
在 Telnet 会话中:
> halt
> mdw 0x0000
诸如此类的事情,以确保您正在与该角色交谈。
如果你已经编译了一些程序,你可以简单地加载它们并运行它们,例如,如果你制作一个仅 ram 的程序(告诉链接器 .text、.data 等都在 0x10000000),那么
> load_image /path/to/myprog.elf
> resume 0x10000001
(是的,加 1 使其变得奇怪,这是一个拇指处理器,不会运行 ARM 指令(lsbit = 0 是 ARM 模式,lsbit = 1 是拇指模式)。
重新编译后重新运行:
> halt
> load_image /path/to/myprog.elf
> resume 0x10000001
然后,在基于内存的程序显示出生命迹象后,请担心闪烁等问题。
如果这些都不起作用,那么 gdb 只是在此基础上增加了一层复杂性,并且将使其更难以弄清楚。
就引导加载程序而言,答案是这取决于您是否尝试从 RAM 或程序运行到 ROM。如果从 ram 运行,您可以接管系统并获取所有 ram,某些芯片(stm32)有一些您可以调用的例程,这些例程需要一些 ram 不受影响,但如果您接管芯片,您可以拥有所有 ram ,这是告诉链接器和调试器是否不知道二进制文件的问题(使用 elf 文件或 ihex 或 srec 或几乎任何不是 .bin 的东西都很好,如果工具支持的话)。
如果您要写入闪存,那么您最好确切地知道闪存的哪个部分可能包含引导加载程序,引导加载程序如何将其传递给您的代码等,并再次告诉链接器和调试器此信息。您可以轻松地擦除/删除引导加载程序,具体取决于引导加载程序的位置和您正在执行的操作(许多 lpc 和 st 部件都有引导加载程序、串行或 USB,它们在某种程度上可以防止偶然错误,但您通常仍然可以擦除它们,并且如果不小心请更换它们)。