私はそのような汎用プログラミング言語を探しています
以下はこれまでの私のリストですが、何が欠けていますか?
自作のForthランタイムは、ごくわずかなメモリに実装できます。 1970年代にコスマックで作った人を知っています。コアランタイムはちょうど30 bytes。でした。
CHIP-8、XPL0、PicoC、およびObjective Camlがグラフ計算機に移植されたと聞いています。ウィキペディアの「レゴマインドストーム」の記事には、レゴRCXまたはレゴNXTプラットフォームで実行されているとされる一連のプログラミング言語がリストされています。 「ライブコーディング」の基準を満たしているものはありますか?
Forth wikiで他のマイクロコントローラーForthsを調べてみてください。これは、Atmel AVRの少なくとも4つのForthをリストします:amforth(すでに述べました)、PFAVR、avrforth、およびByteForth。
(これらのインタープリターへのリンクとこのStackOverflowの質問は、「 Embedded Systems "ウィキブック)に含まれています。
LUA(またはeLUA http://www.eluaproject.net/ )をお勧めします。しばらく前に、LUAをCortex-M3に「移植」しました。私の頭の上から、それは60〜100KBのフラッシュサイズを持ち、約20KBを必要としましたRAM実行するために必要なものです。私は必要最低限のものまで取り除きましたが、アプリケーションによっては、特にRAM=要件について)最適化の余地はまだありますが、8KBで快適に実行できるとは思えません。
Wren は基準に適合します-デフォルトでは、4kのRAMのみを使用するように設定されています。私が書いた人は結局、ターゲットシステム上で完全に実行しているインタープリターを必要としないと判断したため、実際の使用は確認されていません。
言語は、MLとForthの影響を最も強く受けています。
一部のAVRインタープリター/ VM:
AVR用の非常に強力なAvrCo Multitasking Pascalをご覧ください。 http://www.e-lab.de で試すことができます。 MEGA8/88版は無料です。すべての標準デバイス(LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、KEYBOARD、RC5、SERVO、STEPPER ...)のJTAGデバッガーとニースライブまたはシミュレートされた視覚化を備えた大量のドライバーとシミュレーターがあります。
Tiny Basic の Cのポート を検討しましたか?または、おそらく CSD Pascal p-machineをZ-80からご使用のアーキテクチャに書き換えますか?
真剣に、しかし、JavaScriptは優れた埋め込みスクリプト言語になりますが、VM + GCの最小メモリ要件は何なのか、OSの依存関係を削除するのがどれほど難しいのか、私にはわかりません。私はプレイしました。 [〜#〜] njs [〜#〜] しばらくすると、ニーズに合う可能性があります。これは、コンパイラがJavaScript(セルフホスティング)で記述されているという点で興味深いものです。
Espruino 経由のJavaScriptもあります。
これは特にマイクロコントローラー向けに構築されており、システム全体をわずか8kBのRAMに収めるさまざまな異なるチップ(主にSTM32)向けのビルドがあります。
EmbedVM、ホームページ here 、svn repo here がありません。フロントページの両方の[ 1 、 2 ]ビデオをチェックすることを忘れないでください;)
ホームページから:
EmbedVMは、Cのような言語のフロントエンドを備えたマイクロコントローラー用の小さな組み込み可能な仮想マシンです。 GCCおよびAVRマイクロコントローラーでテストされています。ただし、仮想マシンはかなりシンプルなので、他のアーキテクチャに簡単に移植できます。
VMは、最大64kBのメモリにアクセスできる16ビットCPUをシミュレートします。これは、16ビット値と、16ビットおよび8ビット値の配列でのみ動作します。複雑なデータ構造(構造体、オブジェクトなど)はサポートされていません。関数は、最大32個のローカル変数と32個の引数を持つことができます。
VMのメモリに加えて、VM状態を保持する小さな構造と、EmbedVM関数がスタックに必要とする適切なメモリ量は、VMに追加のメモリ要件はありません。特にVMは、動的メモリ管理に依存しません。
EmbedVMは、実行速度ではなく、サイズとシンプルさのために最適化されています。 VM自体は、AVRマイクロコントローラーで約3kBのプログラムメモリを占有します。 16MHzで動作するAVR ATmega168では、VMはミリ秒あたり約75のVM命令を実行できます。
VMによるすべてのメモリアクセスは、ユーザーコールバック関数を使用して実行されます。そのため、外部メモリデバイス、フラッシュメモリなどのVMメモリの一部またはすべて、またはVMへの「メモリマップ」ハードウェア機能を持つことが可能です。
コンパイラは、*。evmファイルを読み込んでさまざまな形式(バイナリファイル、インテル16進数、C配列初期化子、特別なデバッグ出力形式)でバイトコードを生成するUNIX/Linuxコマンドラインツールです。また、ホストアプリケーションからVMメモリ内のデータにアクセスするために使用できるシンボルファイルを生成します。
Cのような言語は次のようになります。 http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm
私は MY-BASIC をお勧めします。最低8 KBのRAMで動作し、移植が簡単です。
プロローグ- http://www.gprolog.org/
グーグル検索「プロローグ小」によると、実行可能ファイルのサイズは、組み込み述語のリンクを回避することにより、かなり小さくすることができます。
私はpythonを使用することをお勧めします。しかし今、唯一の問題はメモリのオーバーヘッドです。だから、後でこの問題に悩まされているかもしれない人たちに素晴らしいアイデアを持っています。
まず最初に、bfインタープリターを作成します(またはどこかからソースコードを取得します)。通訳は本当に小さいでしょう。また、bfはチューリング完全言語です。ここで、コードをpythonで記述し、bfpy( https://github.com/felko/bfpy/blob/master/README.mdを使用してbfにトランスパイラーします。 )。オーバーヘッドを最小限に抑えてソリューションを提供しました。bfインタープリターが10KB以下のRAM使用量に簡単に留まると確信しています。
質問または回答のリストにある言語はどれも、非常に簡単なコンパイルと既存のマイクロコントローラープロジェクトへの統合の要件を満足できるものではありませんでした(開示:実際にすべての提案を試したわけではありません)。
私は代わりに見つけました tinyscript これは、プロジェクトの残りのソースファイルでコンパイルされた単一の_.c
_ + _.h
_ファイルで、void outchar(int c)
スクリプトからの出力を必要としない場合は空にすることができます。
私の場合、主にいくつかのC関数を順番に呼び出すだけなので、実行速度は、ビルドや統合、Cとの相互運用の容易さほど重要ではありません。
単に/bin/sh
busybox によって提供されますか?または 小さいスクリプト言語 の推奨ですか?
私は以前の仕事でBlackFinのbusyboxを使用しています。
私たちはPerl + phpをコンパイルしましたが、s/fork/vfork/gを変更した後はかなりうまくいきました...多かれ少なかれ。 MMU=を持たないのは良い考えではありません。メモリの断片化はサーバーをかなり簡単に殺します。私がしたことはすべて:
for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done
私が上司に近づいていて、サーバーが本番で死ぬだろうと彼に言っている間にそれは死にました:)