OpenOCD Tcl 接口
OpenOCD Tcl interface
我正在编写一个 C# 应用程序,用于在生产期间对 STM32 微控制器进行编程和测试。我想对芯片进行编程和验证,然后将一些配置写入闪存,最后设置读出保护。作为后端,我决定在端口 6666 上使用 OpenOCD 及其 Tcl 接口 运行。
问题:我可以执行命令并得到结果,但我不知道如何检查命令是否成功执行。例如。 reset
命令 returns 空字符串,无论目标是否已连接...其他一些命令,如 mdw
return 数据或错误字符串,但我正在寻找一些通用的方法来检查命令是否成功。
谢谢你的想法。
假设您的 Tcl 代码的核心部分是 sendBack [eval $script]
,您可以将其更改为:
set code [catch {eval $script} result]
sendBack [list $code $result]
甚至这样:
set code [catch {eval $script} result options]
sendBack [list $code $result $options]
您需要在另一侧打开该列表。第一个元素是结果代码(0 表示成功,1 表示错误,理论上还有一些其他元素,但您可能不会看到它们),第二个是结果值或错误消息,第三个(如果您使用第二个代码片段)是一个选项字典,可以包含各种对调试有用的东西(包括结构化错误代码、堆栈跟踪等)
传回完整的结果元组是将整个结果从一个上下文传输到另一个上下文的方式。许多用于 Tcl 的远程调试工具使用几乎完全相同的技巧。
我正在编写一个 C# 应用程序,用于在生产期间对 STM32 微控制器进行编程和测试。我想对芯片进行编程和验证,然后将一些配置写入闪存,最后设置读出保护。作为后端,我决定在端口 6666 上使用 OpenOCD 及其 Tcl 接口 运行。
问题:我可以执行命令并得到结果,但我不知道如何检查命令是否成功执行。例如。 reset
命令 returns 空字符串,无论目标是否已连接...其他一些命令,如 mdw
return 数据或错误字符串,但我正在寻找一些通用的方法来检查命令是否成功。
谢谢你的想法。
假设您的 Tcl 代码的核心部分是 sendBack [eval $script]
,您可以将其更改为:
set code [catch {eval $script} result]
sendBack [list $code $result]
甚至这样:
set code [catch {eval $script} result options]
sendBack [list $code $result $options]
您需要在另一侧打开该列表。第一个元素是结果代码(0 表示成功,1 表示错误,理论上还有一些其他元素,但您可能不会看到它们),第二个是结果值或错误消息,第三个(如果您使用第二个代码片段)是一个选项字典,可以包含各种对调试有用的东西(包括结构化错误代码、堆栈跟踪等)
传回完整的结果元组是将整个结果从一个上下文传输到另一个上下文的方式。许多用于 Tcl 的远程调试工具使用几乎完全相同的技巧。