Tcl 调用函数时发生系统调用错误

Tcl 调用函数时发生系统调用错误,tcl,Tcl,我正在调用一个函数,如下所示: write_phy 1 0 0x100 而函数write_phy是: proc write_phy {phy register value} { if { [regexp {^0} $value] } { scan $value "%o" value } if {$::DEBUG} { puts [format "Write PHY %s register %s = 0x%0.8X" $phy $register

我正在调用一个函数,如下所示:

write_phy 1 0 0x100
而函数write_phy是:

proc write_phy {phy register value} {
  if { [regexp {^0} $value] } {
        scan $value "%o" value
     }

  if {$::DEBUG} {
       puts [format "Write PHY %s register %s = 0x%0.8X" $phy $register $value]
    }
 # exec ./write_phy.pl $phy $register $value
}

after 1;
执行该函数时,我收到一个系统调用错误,尽管print语句工作正常:

Write PHY 1 register 0 = 0x00000000

Disallowed system call: SYS__newselect
代码中的其他函数运行良好


请帮助。

如果我让代码在Tcl 8.6(Raspbian)上运行,它会告诉我它需要一个整数,但得到了“256”。您使用的是什么版本的Tcl和什么操作系统?您运行的是Tcl(如Etcl)或其他发行版吗


另外,当将脚本加载到解释器中时,全局上下文中的“1后”仅暂停一毫秒。这与错误本身无关。我想您可以删除它。

我没有发现您给出的代码与
tcl
中的错误消息有任何关系。是否触发已注释的perl代码?它是做什么的?它执行一个perl脚本,但是它的注释是无论如何的。Shi Dinesh,我已经编辑了代码:底部有“after 1;”。这可能是导致问题的原因。我认为问题出现了,因为我在codepad.org中编译代码,这可以解释问题。
after
命令在其内部执行一个
select()
调用(以各种方式),但是没有真正的理由首先在代码板上尝试代码,因为这样就不会有您试图与之对话的硬件…