【问题标题】:OpenOCD Tcl interfaceOpenOCD Tcl 接口
【发布时间】:2021-01-13 16:59:14
【问题描述】:

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

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

感谢您的想法。

【问题讨论】:

    标签: c# tcl stm32 openocd


    【解决方案1】:

    假设你的 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 表示错误,理论上还有其他一些但你可能不会看到它们),第二个是结果值或错误消息,第三个(如果你使用第二个code sn-p) 是一个选项字典,可以包含对调试有用的各种内容(包括结构化错误代码、堆栈跟踪等)


    传回完整的结果元组是您将整个结果从一个上下文传输到另一个上下文的方式。许多 Tcl 远程调试工具使用几乎完全相同的技巧。

    【讨论】:

    • 其实catch 命令正是我要找的那个。谢谢!
    • 最后我得到了这个命令包装器:list [catch {capture "$script"} result] $result,它产生双元素列表,其中第一个元素是返回码,第二个元素是实际的命令输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多