在 Forth 中使用常量命名硬件地址

Use constants to name a hardware address in Forth

我在使用以下 Forth 代码时遇到了一些问题:

    HEX
    FFFF3E27 CONSTANT SHUTTER 
    DECIMAL

    : OPEN 1 SWAP ! ;
    : CLOSE 0 SWAP ! ;

现在我要将“1”写入快门地址:

SHUTTER OPEN

这是我的错误:

:15: Invalid memory address
SHUTTER >>>OPEN<<<
Backtrace:
D436398 ! 

我错过了什么吗?

代码基本正确。我认为问题可能出在地址本身以及其中存储的内容。

具体来说,!存放的是一个cell,也就是栈上word的正常大小。鉴于该地址大小,我猜它是 32 位。

现在,问题是地址是奇数。许多硬件架构不允许在奇数地址或除可被 4 整除的地址以外的任何地方存储 32 位字。

如果您想存储单个字节,请使用 C!(或您的 Forth 实现中的一些等价物)。