AmForth在-13异常(未定义单词)后需要重新刷新



我有一台运行AmForth 6.1的ATMega328p。

在交互调试时,我不小心调用了一个未定义的单词,导致AmForth抛出了一个-13异常(undefined word)。

抛出异常后,AmForth的行为很奇怪。对预定义单词(如words)的调用或对简单操作(如1 1 +)的调用失败。

我找到的唯一解决方案是重新闪存芯片,这显然不太理想。

我是否没有正确处理错误?来自GForth的背景,我习惯于对异常进行持续操作。AmForth似乎不是这样运作的。

在调用未定义的单词后,如何让AmForth正确操作?

以下是使用CATCHTHROW:的示例

  Throw an exception.
: check    42 throw ;
 Call check, and catch any exception.
' check catch .
 Should print 42.

我提到QUIT是因为它是默认的Forth解释器,在AmForth源代码中,它看起来应该捕获异常。也许您正在使用另一个版本的AmForth,或者您没有与标准文本解释器进行交互。

QUIT刚刚进入Forth文本解释器。它可能看起来很奇怪,但如果你用一个词来称呼它,它是有道理的。无论返回堆栈有多深,QUIT都会清空它并进入交互模式。然而,它保留了数据堆栈。

: foo 1 2 3 quit ;
: bar foo ;
bar .s  Should print 1 2 3.

最新更新