在 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 实现中的一些等价物)。
我在使用以下 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 实现中的一些等价物)。