真的无法理解为什么我的程序不起作用

时间:2011-01-11 12:08:11

标签: occam-pi

我真的花了很多时间在这个问题上工作并四处寻找解决方案,但我似乎无法找到错误。

我正在学习如何编码occam并拥有以下程序:

PROC light (CHAN OF BYTE screen, CHAN OF INT light.change)
  INT light.on :
  WHILE TRUE
    SEQ
      light.change ? light.on
      IF
        light.on = 1
          screen ! 'y'
        TRUE
          SKIP
:

PROC test(CHAN OF BYTE keyboard, scr)
  CHAN OF INT to.light :
  INITIAL INT on IS 1(INT) :
  BYTE b :
  SEQ
    light(scr, to.light)
    WHILE TRUE
      SEQ
        keyboard ? b
        IF
          b = 'o'
            to.light ! on
          TRUE
            SKIP
:

当我按下“ o ”键时,我要做的就是从一个流程进行沟通。

我从(KR o C)编译器获得的错误消息是:

Error at lift.occ:11
Program failed, state = e, eflags = 00000000

这是light.on = 1行。

据我所见, light PROC 会等待 light.change的某些输入 channel 然后将其分配给 light.on variable 。然后,程序将进入条件语句 IF ,其中light.on = 1行应评估为 true 。但相反,我得到了这个错误。

我尝试使用 -verbose 标志,但编译器说你不能将它用于.occ文件。

有谁知道如何从编译器获取更详细的信息?

对此的任何帮助将不胜感激。

由于

1 个答案:

答案 0 :(得分:1)

上面的代码为我编译,当运行到达死锁时

james:conc$ occbuild --program light.occ 
james:conc$ light
KRoC: deadlock: no valid processes found in workspace(s)

KRoC: program deadlocked (no processes to run)

我也可以让它以详细模式运行,如下所示

occbuild -v --program light.occ 

另外,您可能想要更改结构。尝试使用三个PROC

PROC is.light.on(CHAN BYTE screen! , CHAN INT light.control)
  WHILE TRUE
...output to terminal if light is on or off

PROC light.switch(CHAN BYTE keyboard? , CHAN INT light.control)
  WHILE TRUE
...use the keyboard to turn light on and off

PROC light(CHAN BYTE keyboard? , screen!)
  CHAN INT light.control:--0 for light on;1 for light off
  PAR
    light.switch(keyboard? , light.control!)
    is.light.on(screen! , light.control?)