【问题标题】:Global variable in TclTcl 中的全局变量
【发布时间】:2019-12-19 22:13:57
【问题描述】:

我试图通过在函数外部声明全局变量 (gpio_out_set_3) 来使用它(因为该变量将来也可能在其他函数中使用)。在函数内部,我声明了与“global”相同的变量,并尝试通过“$gpio_out_set_3”访问它。

我收到一个错误“无法读取“gpio_out_set_3”:没有这样的变量”

set gpio_out_set_3 0x03
proc port2phy { device } {
   global gpio_out_set_3 
   erf_wr devcpu_gcb $gpio_out_set_3 $phy_mdc_gate_en
  }

请帮忙。

【问题讨论】:

  • 您确定变量是在 proc 被调用之前定义的吗?

标签: tcl


【解决方案1】:

使用variable 命令在main 文件的开头声明所有全局变量。

variable gpio_out_set_3 0x03

提示:我不喜欢全局命令。我总是忘记使用,很难看出哪个变量是全局的,哪个变量是局部的。我更喜欢$::<varname>,它指向全局namespace

proc port2phy { device } {
   erf_wr devcpu_gcb $::gpio_out_set_3 $phy_mdc_gate_en
}

【讨论】:

    【解决方案2】:

    我的猜测是,当您创建变量 gpio_out_set_3 时,您不在顶层。您正在执行其他程序。所以 gpio_out_set_3 并不是真正的全局,而是在某些 proc 中是本地的。

    【讨论】:

      【解决方案3】:

      您的全局变量名为 gpio_out_set_0(与 gpio_out_set_3 不同)。

      【讨论】:

      • 以下代码在我的机器上运行:set gpio_out_set_3 0x03; proc port2phy { device } { global gpio_out_set_3 ; puts $gpio_out_set_3; }
      • 是的,它有效。您在此处发布的评论应该是答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2013-10-06
      相关资源
      最近更新 更多