首页 > 解决方案 > OpenOCD Tcl 接口

问题描述

我正在编写一个 C# 应用程序,该应用程序将用于在生产期间对 STM32 微控制器进行编程和测试。我想对芯片进行编程和验证,然后将一些配置写入闪存,最后设置读出保护。作为后端,我决定使用 OpenOCD 及其在端口 6666 上运行的 Tcl 接口。

问题:我能够执行命令并获得结果,但我不知道如何检查命令是否成功执行。例如,reset无论目标是否连接,该命令都返回空字符串......其他一些命令,如mdw返回数据或错误字符串,但我正在寻找一些通用方法来检查命令是否成功。

谢谢你的想法。

标签: c#tclstm32openocd

解决方案


假设你的 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 的远程调试工具使用几乎完全相同的技巧。


推荐阅读