我在使用以下 Forth 代码时遇到了一些问题:
HEX
FFFF3E27 CONSTANT SHUTTER
DECIMAL
: OPEN 1 SWAP ! ;
: CLOSE 0 SWAP ! ;
现在我想将“1”写入快门地址:
SHUTTER OPEN
这是我的错误:
:15: Invalid memory address
SHUTTER >>>OPEN<<<
Backtrace:
$10D436398 !
我错过了什么吗?
最佳答案
代码基本上是正确的。我认为问题可能出在地址本身以及其中存储的内容。
具体来说,!
存放的是一个cell,也就是栈上单词的正常大小。鉴于该地址大小,我猜它是 32 位。
现在,问题是地址是奇数。许多硬件架构不允许在奇数地址或除可被 4 整除的地址之外的任何地址存储 32 位字。
如果您想存储单个字节,请使用 C!
(或您的 Forth 实现中的一些等价物)。
关于forth - 在 Forth 中使用常量命名硬件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37641591/