我有一个运行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 source code中,它似乎应该捕获异常。也许您正在使用其他版本的AmForth,或者您没有与标准文本解释器进行交互。
QUIT刚刚进入Forth文本解释器。这个名字看似奇特,但如果您用一个单词来称呼它,这是有道理的。不管返回堆栈有多深,QUIT都会清空它并进入交互模式。但是,它保留数据堆栈。
: foo 1 2 3 quit ;
: bar foo ;
bar .s \ Should print 1 2 3.

关于arduino - -13异常(未定义的字)后,AmForth需要重新刷新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34107679/

10-11 19:39