73

汎用プログラミング言語を探しています

  • インタラクティブな (ライブ コーディング) プロンプトを表示する
  • 単独で 32 KB の RAM で動作するか、コンパイラが別のマシンでホストされている場合は 8 KB で動作します
  • 合計 8 ~ 32 KB の RAM (MMU なし) のマイクロコントローラーで実行できます。

以下はこれまでのリストですが、何が欠けていますか?

  • Python : PyMite VMには 64K のフラッシュと 8K の RAM が必要です。8K以上のLPC、SAM7、ATmegaが対象。主催。
  • Lua : eLua FAQ では、256K フラッシュ、64K RAM を推奨しています。
  • FORTH : amforthには、ATmegaに 8K フラッシュ、150 バイトの RAM、30 バイトの EEPROM が必要です。
  • スキーム:脇の下 スキーム最小のターゲットは、32K フラッシュ、4K SRAM を搭載した LPC2103 です。
  • C : Interactive Cは 68HC11 で実行され、フラッシュと 32K SRAM はありません。主催。
  • C : picocは、オープン ソース、クロス コンパイル、インタラクティブな C システムです。AVR 用にコンパイルすると、63K のフラッシュと 8K の RAM が必要になります。テーブルをフラッシュに保持することで、RAM を削減できます。
  • C++ : AngelScriptは、オープン ソースのバイトコード ベースの C/C++ ライクなスクリプト言語で、ネイティブ呼び出しが簡単です。
  • Tcl : TinyTCLは DOS、60K バイナリで動作します。移植しやすそうです。
  • BASIC : TinyBasic : 64K ヒープで初期化します。調整可能かもしれません。
  • 舌足らずの発音
  • PostScript : (低メモリ用の FOSS 実装はまだ見つかりません)
  • Shell : bitlash : Arduino (ATmega) 用の対話型コマンド シェル。AVRSHも参照してください。
4

16 に答える 16

9

自作の Forth ランタイムは、実際には非常に少ないメモリで実装できます。1970年代にコスマックで作った人を知っています。コア ランタイムはわずか 30バイトでした。

于 2009-07-04T20:04:09.053 に答える
8

CHIP-8、XPL0、PicoC、Objective Camlがグラフ電卓に移植されたそうです。ウィキペディアの「レゴ マインドストーム」の記事には、レゴ RCX またはレゴ NXT プラットフォームで実行されるとされるプログラミング言語が多数リストされています。「ライブコーディング」の基準を満たすものはありますか?

Forth wiki で、他のマイクロコントローラー Forths をチェックしてみてください。Atmel AVR 用に少なくとも 4 つの Forth がリストされています: amforth (既に言及されています)、PFAVR、avrforth、および ByteForth。
(これらのインタープリターへのリンクと、この StackOverflow の質問は、「組み込みシステム」ウィキブックに含まれています)。

于 2009-12-24T17:58:52.307 に答える
5

LUA (または eLUA http://www.eluaproject.net/ ) をお勧めします。しばらく前に、LUA を Cortex-M3 に「移植」しました。私の頭の上から、60〜100KBのフラッシュサイズがあり、実行するには約20KBのRAMが必要でした. 必要最低限​​のものだけに絞りましたが、用途によってはそれで十分かもしれません。特に RAM 要件に関しては、まだ最適化の余地がありますが、8KB で快適に実行できるとは思えません。

于 2009-07-06T14:09:56.473 に答える
5

Wrenはあなたの基準に適合します。デフォルトでは、4k の RAM のみを使用するように構成されています。私の知る限り、実際の使用は見られませんでした。なぜなら、私がそれを書いた人は、結局のところ、ターゲットシステムで完全に実行されるインタープリターを必要としないと判断したからです。

この言語は、ML と Forth の影響を最も明確に受けています。

于 2012-01-02T02:22:57.380 に答える
2

AVR 用の非常に強力な AvrCo Multitasking Pascal を見ることができます。http://www.e-lab.deで試すことができます。MEGA8/88版は無料です。JTAG デバッガーとすべての標準デバイス (LCDCHAR、LCDGRAPH、7SEG、14SEG、LEDDOT、KEYBOARD、RC5、SERVO、STEPPER...) の素晴らしいライブまたはシミュレートされた視覚化を備えたドライバーとシミュレーターがたくさんあります。

于 2010-10-28T13:56:14.807 に答える
2

Tiny BasicのCでの移植を検討しましたか? それとも、UCSD Pascal p-machine を Z-80 からアーキテクチャに書き直すのでしょうか?

まじめな話、JavaScript は優れた組み込みスクリプト言語になりますが、VM + GC の最小メモリ要件や、OS の依存関係を取り除くのがどれほど難しいかはわかりません。しばらく前にNJSで遊んだことがありますが、これはおそらくあなたのニーズに合うでしょう。これは、コンパイラーが JavaScript (セルフ・ホスティング) で書かれているという点で興味深いものです。

于 2009-07-08T14:25:39.667 に答える
1

MY-BASICをお勧めします。これは、最小 8 KB の RAM で動作し、移植が容易です。

于 2015-04-20T04:40:12.167 に答える
1

EmbedVM、ホームページはこちら、svn リポジトリはこちらです。フロントページの両方の [ 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 は 1 ミリ秒あたり約 75 個の VM 命令を実行できます。

VM によって行われるすべてのメモリ アクセスは、ユーザー コールバック関数を使用して実行されます。そのため、VM メモリの一部またはすべてを外部メモリ デバイス、フラッシュ メモリなどに配置したり、ハードウェア機能を VM に「メモリ マップ」したりすることができます。

コンパイラは、*.evm ファイルを読み取り、さまざまな形式 (バイナリ ファイル、インテル 16 進数、C 配列初期化子、および特別なデバッグ出力形式) でバイトコードを生成する UNIX/Linux コマンドライン ツールです。また、ホスト アプリケーションから VM メモリ内のデータにアクセスするために使用できるシンボル ファイルも生成します。

C ライクな言語は次のようになります: http://svn.clifford.at/embedvm/trunk/examples/numberquizz/vmcode.evm

于 2013-02-07T02:19:06.427 に答える
0

単にbusybox/bin/shが 提供するものを使用することを検討しましたか?または、彼らが推奨する小さなスクリプト言語のどれですか?

于 2009-07-04T19:31:22.830 に答える
0

プロローグ - http://www.gprolog.org/

Google 検索 "prolog small" によると、組み込みの述語をリンクしないようにすることで、実行可能ファイルのサイズを非常に小さくすることができます。

于 2009-09-17T18:37:31.283 に答える
-1

BlackFin で前作の busybox を使用してきました。

s/fork/vfork/g を変更した後、perl + php をコンパイルしました。MMU を持っていないのは得策ではありません。メモリの断片化により、サーバーは非常に簡単に停止します。私がしたことはすべて:

for i in `seq 1 100`; do wget http://black-fin-ip/test.php; done

私が上司のところに歩いて行き、本番環境でサーバーが停止することを伝えている間に停止しました:)

于 2009-07-04T19:48:22.937 に答える
-2

アーラン - http://erlang.org/

2MBに収まります

http://www.experts123.com/q/is-erlang-small-enough-for-embedded-systems.html

于 2009-09-17T18:42:16.827 に答える