問題タブ [forth]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86 - x86 Forth 実装が実行されない
64 ビット Linux ボックスでJonesForth (Git リポジトリ: git://git.annexia.org/git/jonesforth.git)を実行しようとしています。コンパイルはチュートリアルに記載されているとおりで、Makefile で使用され、正常に動作します。
しかし、私は何も実行できません:
終了コード 137 は SIGKILL のように見えますが、それ以外に何が起こっているのかわかりません。実行中に何か問題が発生するかどうかを確認しようとしましたが、残念ながらそのプログラムでGDBを使用することさえできません (最初に でコンパイルしています-g
):
何がうまくいかないのですか?
expect - 期待スクリプトの「エコーチェック」
/dev/ttyUSB0 経由で Forth ソース ファイルをマイクロコントローラーにアップロードするためのスクリプトを書いています。
私の目的は、「ok」プロンプトを緑色、「再定義」を黄色に色付けし、「見つかりません」などのエラーで終了することです。
私が抱えている問題は、文字の送信が速すぎることです。次のように遅延を使用できることを知っています。
しかし、これは最適ではありません。okプロンプトのような追加のフィードバックを許可しながら、文字がエコーバックされたことを確認するオプションはありますか? これが私のスクリプトの始まりです:
callback - GTK+ Forth コールバック
私は最近、4 年前の Manfred Mahlow の記事に出くわしました。記事「Glade を使用して Forth で GTK+ アプリケーションを作成する」では、シグナル ハンドラーに触れ、Forth は使用できず、C のみで作成できると述べました。私の問題はまだ小さなものだと思いますが、困惑しています。どんな提案にも非常に感謝しています。次に、アドレスにダッシュを使用せずにマーロウ氏にメールを送信する方法を誰かが知っている場合は、それを聞いてみたい.
Linux バージョンのSwiftForthを使用してカスタム ウィンドウを作成し、キーを押してそのウィンドウに書き込むアプリケーションを作成しています。私の目標は、Charles Moore のcolorForthを実装し、強化され、よりユーザーフレンドリーになることです。GTK+についてほとんど知らずに使用することにしましたが、コールバック (シグナル ハンドラー) 以外は成功しています。コードは全部で 2 ページしかないので、ここに置きます。
私が持っているどのライブラリにも見つからなかったため、通常の g_signal_connect を使用できませんでした。見つかったら、コードが簡単なのでそれを使用します。ただし、上記のコードはコンパイルされ、STARTUP と入力すると、まさにそれが実行されます。指定したとおりにウィンドウがあり、シグナルが設定されていますが、任意のキーを押すと、「セグメンテーション違反」で SwiftForth がクラッシュします。
ご覧のとおり、ハンドラーの絶対アドレスをシグナル接続関数に供給しています。また、そのアドレスを変数に入れてポインターとして処理しようとしましたが、GTK+ エラーが発生します。
ハンドラーを作成する際、私はそれが他のライブラリー呼び出しと同じように動作すると想定しました。入力パラメーターは、ハンドラー コードの実行時に GTK によって提供されるリターン スタック上にあり、すべてのリターンを EAX に入れることになっています。しかし、この分析は間違っている可能性があります。アドレスの準備が間違っているか、ハンドラーのパラメーターが間違っているか、まったく間違った概念を持っている可能性があります。
ハンドラーは C でなければならないという声明にもかかわらず、必要に応じてアセンブラーで C コードが行うことをシミュレートする方法があることを願っています。
私は、このブレークスルーを達成するにはあと 1 つのハードルがあると感じています。誰かがいくつかの提案や私が見るべき場所を送ってくれたら、とても感謝しています.
forth - Forth - ASCII コードを char に変換する
シリアル ポートからデータを読み取る Parallax Propeller マイクロコントローラー用のプログラムを Tachyon Forth で作成しようとしています。
SERIN ワードはデータを数値として返します。
10 進数 OK 57600 SERBAUD OK 31 SERIN . 36 大丈夫
「31 SERIN」は、ピン P31 (RX) からデータを読み取ります。「$」と入力すると、36 が返されました。この数値 (ASCII コード) を 1 文字の文字列に変換するにはどうすればよいですか? この場合、単一の「$」記号を使用します。
forth - ループからの例外のキャッチ
スタック上のすべてのアイテムをドロップする Forth ワードを書き込もうとしています。「ドロップ」で無限ループを実行し、スタックが空であるために「ドロップ」が失敗したときにエラーをキャッチするという、かなりばかげた方法を使用しています。
私の言葉は次のように定義されています。
droploop を実行すると、予想どおりのエラーが発生し、実行後にスタックが空になります。dropcatcher を実行すると、スタックが空でない場合はドロップし、スタックが空の場合は何も報告しません。dropall を実行すると、あらゆる種類のものがスタックに残ります。
次のようになります。
2 3 4 5 6 7 8 9 10 dropall .s <9> -1 3 -1 5 -1 7 -1 9 -1 OK
droploop と dropcatcher はそれ自体で正しく動作しているように見えるため、dropall は問題なくスタックを単純にクリアすると思いますが、残念ながら、dropall が動作しない理由がわかりません。
dropall の動作が droploop や dropcatcher と異なるように見えるのはなぜですか? または、私はここで間違っていますか?
memory-management - 「割り当て」なしで辞書メモリを使用しても問題ありませんか?
同じことをさまざまな方法で実行しようとしているプログラミング演習を行っています。(たまたま、Forth で 2 つの 3 要素ベクトルを一緒に追加しています)。私のリビジョンの 1 つで、リターン スタックを使用して一時的な値を保存しました (そのため、その機能を使用しています) が、それに加えて、割り当てられていないメモリを一時ストレージとして使用することを検討しています。
この記憶にアクセスするために 2 つの単語を作成しました。
私は自分の実験でそれを試しましたが、私がやっていることにはうまくいくようでした. ルーチンが完了した後、このメモリを使用するつもりはありません。そして、私は辞書に住んでいますが、その記憶はすでにプログラムに与えられています。
しかし、私の腸はまだこれを行うのは悪いことだと言っています. これはそんなに悪いことですか?
問題があれば、私はGforthを使用しています。