代码生成错误 61056:在单周期定时循环中,多处调用同一个不可重入的子VI



主要软件:
主要软件版本: 8.0
主要软件修正版本: N/A
次要软件: N/A

问题: 在代码生成过程中,出现如下错误提示信息“Error 61056: Sub VI is non-reentrant, is in a Single-cycle Timed Loop, and has more than one caller”。我在该循环中并没有多次调用不可重入的子VI,为什么会出现这个错误呢?

解答: 这个问题并不仅仅取决于您在单周期定时循环中是否多次调用一个子VI。如果一个子VI在一个程序的多个地方被调用,那么它就成了“共享资源”。共享资源是指任何被多个地方使用的东西。从实现的角度来看,共享资源需要额外的电路逻辑——仲裁。仲裁电路的执行时间通常多于一个时钟周期,所以它不能出现在单周期定时循环(SCTL)中。要解决这个问题,您需要在VI Properties>>Execution>>Reentrant Execution中使能VI的可重入属性。这样会为该VI生成多个实例——在每个调用处放置一个该VI的拷贝,具有可重入属性的VI虽然被多处调用,但是却不是共享资源了。需要记住的是,不能在一个由此具有可重入属性的VI中使用功能性全局变量,因为在每个调用点上会为它们生成新的存储空间


参考下面的屏幕截图:



尽管上图的SubVI不会在同一时间内被访问,但您仍然需要使能它们的可重入属性,因为它们被放置在SCTL中,并在多个地方被使用。

相关链接:
KnowledgeBase 3UF966XJ: Code Generation Error 61056: Invalid Arbitration for Single-Cycle Timed Loop
KnowledgeBase 3L4GI4WB: Error 61056: SubVI has callers inside and outside a Single-Cycle Timed Loop

附件:


subvi_arb.bmp


报告日期: 09/19/2006
最近更新: 10/09/2006
文档编号: 3UF9NAXJ