2016-06-05 12 views
3

eine Hardware-Adresse nennen ich mit dem folgenden Code Forth einige Probleme habe:Verwenden Konstanten in Forth

HEX 
    FFFF3E27 CONSTANT SHUTTER 
    DECIMAL 

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

Jetzt möchte ich "1" an den Verschluss Adresse schreiben:

SHUTTER OPEN

Das ist mein Fehler:

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

Fehle ich etwas?

+1

Angeblich ist die Nummer FFFF3E27 keine gültige Adresse. Versuchen Sie z.B. 'hex FFFF3E27 @'. –

+1

Wie @LarsBrinkhoff sagt versuchen Sie es direkt von der Kommandozeile aus: '1 SHUTTER!' Wenn derselbe Fehler auftritt, ist die Adresse FFFF3E27 in Ihrem System nicht gültig. Oder vielleicht nicht Wort ausgerichtet, sollten Sie versuchen, C! oder 'B!' wenn dein System es hat. –

+0

Welches CPU-Modell ist das? – agc

Antwort

3

Der Code ist im Wesentlichen korrekt. Ich glaube, dass das Problem mit der Adresse selbst sein könnte und was darin gespeichert wird.

Speziell speichert ! eine Zelle, die die normale Größe des Wortes auf dem Stapel ist. Angesichts dieser Adressgröße glaube ich, dass es 32 Bits sind.

Jetzt ist das Problem, dass die Adresse ungerade ist. Viele Hardwarearchitekturen erlauben nicht das Speichern von 32-Bit-Wörtern an ungeraden Adressen oder irgendetwas außer durch 4 teilbare Adressen.

Wenn Sie ein einzelnes Byte speichern möchten, verwenden Sie C! (oder einen ähnlichen Wert in Ihrer Forth-Implementierung).

Verwandte Themen