如何在运行命令后对OpenOCD进行Daemonize

时间:2014-04-03 15:09:14

标签: bash openocd

我听说OpenOCD在运行一些命令后应该守护进程。

我尝试将命令作为CLI参数。这些命令是运行的,但OpenOCD之后没有后台,因此GDB永远不会运行。我可以添加'&'到openocd命令的末尾,但后来我与GDB有竞争条件。

如何在加载闪存后进行OpenOCD守护?

13 # Launch OpenOCD
14   # specify our hardware debugger and mcu type
15   # reset target
16   # erase in bank 0 from 20k (0x5000) to end of flash
17   # load hex format because elf has extraneous section at 0x00000000
18   # NOTE: we don't use 'erase' so we can't blow away bootloader
19   # ??? daemonize when done so GDB can run 
20 openocd -f interface/olimex-arm-usb-tiny-h.cfg -f target/stm32f1x.cfg \
21   -l .openocd.log \
22   -c "init" -c "reset init" \
23   -c "flash erase_sector 0 20 last" \
24   -c "flash write_image $HEXFILE"
25
26 # run gdb
...

1 个答案:

答案 0 :(得分:1)

您可以使用monitor命令从GDB执行此操作,而不是在OpenOCD中编写Flash。

将您的OpenOCD更改为按如下方式启动:

20 openocd -f interface/olimex-arm-usb-tiny-h.cfg -f target/stm32f1x.cfg \
21   -l .openocd.log \
22   -c "init" &

然后使用与此类似的.gdbinit

target remote localhost:3333
monitor reset halt
monitor flash erase_sector 0 20 last
monitor flash write_image build/my_project.hex
set remote hardware-breakpoint-limit 6
set remote hardware-watchpoint-limit 4
break main
continue

你仍然有竞争条件,因为OpenOCD仍然需要时间来启动,但这对我来说没有任何延迟。