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

AmForth needs a re-flash after -13 exception (undefined word)

我有一个 ATMega328p 运行 AmForth 6.1。

在交互式调试时,我不小心调用了一个未定义的词,导致 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 source code 中,它看起来应该捕获异常。也许您正在使用另一个版本的 AmForth,或者您没有与标准文本解释器进行交互。

QUIT 刚进入 Forth 文本解释器。它可能看起来是一个奇怪的名字,但如果你用一个词来称呼它,它就是有意义的。无论 return 堆栈有多深,QUIT 都会清空它并进入交互模式。但是,它保留数据堆栈。

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