我有一个运行AmForth 6.1的ATMega328p。
在进行交互式调试时,我不小心调用了一个未定义的单词,导致AmForth抛出了-13
异常(undefined word
)。
引发异常后,AmForth表现得很奇怪。调用预定义单词(例如words
)或简单操作(例如1 1 +
)失败。
到目前为止,我发现的唯一解决方案是重新刷新芯片,这显然不理想。
我不能正确处理错误吗?来自GForth的背景,我习惯于继续对异常进行操作。似乎AmForth不能以这种方式运行。
调用未定义的单词后,如何使AmForth正常运行?
最佳答案
这是使用CATCH
和THROW
的示例:
\ 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/