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 在调用未定义的词后正确运行?
这是使用 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 文本解释器。它可能看起来是一个奇怪的名字,但如果你用一个词来称呼它,它就是有意义的。无论 return 堆栈有多深,QUIT
都会清空它并进入交互模式。但是,它保留数据堆栈。
: foo 1 2 3 quit ;
: bar foo ;
bar .s \ Should print 1 2 3.
我有一个 ATMega328p 运行 AmForth 6.1。
在交互式调试时,我不小心调用了一个未定义的词,导致 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 文本解释器。它可能看起来是一个奇怪的名字,但如果你用一个词来称呼它,它就是有意义的。无论 return 堆栈有多深,QUIT
都会清空它并进入交互模式。但是,它保留数据堆栈。
: foo 1 2 3 quit ;
: bar foo ;
bar .s \ Should print 1 2 3.