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

标签 forth gforth

我在使用以下 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/

相关文章:

function - 如何读取用户输入的整数并在 Forth 中提供函数?

forth - Forth 中有条件退出的说法吗?

forth - 测量执行时间

第四 - 如何实现字访问硬件寄存器中的位域?

local-variables - (GNU) 第四局部变量行为

forth - "local variable"在 Forth 编程语言中是什么意思?

forth - AND Forth 中的 'tick' 发生了什么?

forth - 在 Forth 中打印函数的定义

forth - 如何在 Forth 中对参数进行排序

forth - Gforth、FORGET 和 LIST 词与原始 Forth 中的一样