Skip to content

Latest commit

 

History

History
45 lines (32 loc) · 5.45 KB

setup.md

File metadata and controls

45 lines (32 loc) · 5.45 KB

セットアップ

Copyright 2017-2023 Moddable Tech, Inc.
改訂: 2023年6月28日

背景

最小限のMCUでJavaScriptを使用するには、非常に軽量なランタイムが必要です。ランタイムを小さく保つ明確な方法の1つは、実行されるアプリケーションに必要な機能のみを含めることです。例えば、現代のLinux、macOS、またはWindowsのディストリビューションには、ユーザーが接続する可能性のあるさまざまなディスプレイをサポートするためのドライバが含まれていますが、効率的なMCUディストリビューションには、デバイスの内蔵ディスプレイをサポートするための単一のディスプレイドライバのみが含まれています。その結果、各デバイス構成(MCU + ディスプレイ + ネットワーク機能など)は独自のものとなります。

無数のハードウェア構成とそれをサポートするソフトウェアフレームワークは可能ですが、実際にはいくつかの構成が一般的に使用されています。例えば、Moddable ZeroはESP8266 Wi-FiモジュールとILI9341ディスプレイコントローラー、QVGAディスプレイ、およびXPT2046抵抗膜式タッチスクリーンコントローラーを組み合わせています。マニフェストはファームウェアに含めるモジュールを定義します。マニフェストには、これらのモジュールをどのようにインスタンス化するか、その構成、またはJavaScriptのグローバル変数にどのように表示されるかについての指示は含まれていません。

いくつかのデプロイメントでは、設定とインスタンス化がアプリケーションによって行われます。しかし、多くの場合、特定のハードウェア構成に対するこれらのタスクをアプリケーション間で共有することは便利です。これは、サンプルコードの場合に当てはまり、できるだけシンプルで焦点を絞ったものにする必要があり、デフォルトの設定を受け入れることができるデバイスアプリケーションの初期バージョンにも当てはまります。

セットアップモジュール

設定とインスタンス化は、1つ以上のセットアップモジュールで実装される場合があります。セットアップモジュールは、setup/で始まるモジュールが指定されていることで識別されます。すべてのセットアップモジュールはメインモジュールの前に実行され、メインモジュールが必要とする環境を準備します。例えば、Moddable Zeroには2つの主要なセットアップモジュールがあります。setup/networkモジュールはWi-Fi接続を確立し、IPアドレスを取得し、リアルタイムクロックを設定します。setup/piuモジュールはディスプレイとタッチドライバをインスタンス化し、それらをグローバル変数screenにバインドします。

通常、アプリケーションはセットアップモジュールを明示的にマニフェストに含める必要はありません。必要なマニフェストによって含まれるためです。例えば、example/manifest_network.jsonマニフェストにはsetup/networkが含まれ、example/manifest_piu.jsonマニフェストにはsetup/piuが含まれています。

セットアップの実装は簡単です。モジュールは実行するための単一の関数をエクスポートします。この関数は起動時に呼び出されます。複数のセットアップモジュールがある場合、それらが呼び出される順序は保証されません。

セットアップ関数は、セットアップが完了したときに呼び出す done 関数という単一の引数を受け取ります。done 関数は、ネットワーク接続の確立などの非同期操作を実行するために使用されます。

export default function (done) {
	setupOperation();
	done();
}

プリロード

RAMの使用を最小限に抑え、起動時間を短縮するために、メインモジュールおよび任意のセットアップモジュールはプリロードする必要があります。

追加の注意事項

  • セットアップモジュールのアイデアは、Arduinoアプリケーションモデルのセットアップ関数に緩やかに基づいています。
  • シミュレータは、メインモジュールを実行する前に画面のグローバル変数を初期化するなど、セットアップの作業を暗黙的に実行します。
  • セットアップモジュールは、最初の(メインの)仮想マシンでのみ実行されます。例えば、ワーカーを使用する場合、セットアップモジュールはワーカー内では実行されません。
  • ホストによって提供されるセットアップモジュールを削除することが有用な場合があります。例えば、デフォルトの setup/network モジュールを置き換えて、アプリケーションスクリプトがWi-Fi接続を自分で管理できるようにする場合です。これは、マニフェストの "~" オプションを使用して実現されます。
"modules": {
	"~": [
		"$(MODDABLE)/build/devices/esp32/setup/network"
	]
}