2011-01-11 57 views
0

我真的花了很多時間在這個問題上工作,並使用Google搜索尋找解決方案,但我似乎無法找到問題所在。真的不明白爲什麼我的程序不能正常工作

我學習如何編寫奧卡姆並具有以下程序:

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 ö C)編譯得到的錯誤信息是:

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

這是light.on = 1線。

據我所看到的,lightPROC會等待一些輸入其light.changechannel,並隨後將其分配給它的light.onvariable。該程序然後將進行條件語句IF,其中light.on = 1行應在這種情況下評估爲true。但是,我得到這個錯誤。

我試過使用-verbose標誌,但編譯器說你不能將它用於.occ文件。

有誰知道如何或如果我可以從編譯器得到更詳細的信息?

任何幫助,將不勝感激。

感謝

回答

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?) 
+0

謝謝你的回答。我很感激。我將不得不等到明天再試一試。 – Joe 2011-01-11 21:41:56

相關問題