概要
- 目次
DAL/CODAL とも呼ばれる micro:bit ランタイムは、micro:bit 上で動作し、micro:bit の主要なプログラミング言語の大半を支えるソフトウェアです。これを理解することで、micro:bit がどのように動作しているかを理解できるだけでなく、さらに深く micro:bit を掘り下げたい場合や、自分独自の micro:bit ハードウェア拡張向けのサポートソフトウェアを書きたい場合、あるいは micro:bit 上の何かを調整または改善したい場合に、どこから始めればよいかも分かるようになります。
| V2 | V1 |
|---|---|
| ソフトウェアアーキテクチャ図 v1 | ソフトウェアアーキテクチャ図 v2 |
micro:bit 上では、Javascript のような使いやすい言語を利用できるようにするために、いくつもの重要なソフトウェアレイヤーが動作しています。これらの一部、たとえば Arm Mbed や MicroPython は BBC micro:bit プロジェクトが始まる前から存在しており、また micro:bit ランタイムのように、micro:bit のために特別に書かれたものもあります。
Arm Mbed は、Arm Cortex プロセッサを使用するチップ向けにハードウェア抽象化レイヤー (HAL) を提供します。この抽象化レイヤーは、開発者が Nordic チップを含むあらゆる Arm ベースのプロセッサ向けソフトウェアを書くために利用できる、統一されたレイヤーを提供します。これにより、より高水準の環境から利用するための SPI、I2C、serial などの周辺インターフェイスに簡単にアクセスできます。
micro:bit 向けに C/C++ コードを書く場合は、micro:bit ランタイムの使用を強く推奨します。これは C/C++ プログラム向けの使いやすい API を提供し、必要な部分だけを利用できるようにコンポーネント化された形で書かれています(たとえば、MicroBitDisplay だけを使うこともできます)。
micro:bit ランタイムのデバイス抽象化レイヤー (DAL) - V1
micro:bit ランタイムは、Arm Mbed を用いて構築された デバイス抽象化レイヤー (DAL) を提供します。Lancaster University は、学校におけるコンピューターサイエンスの導入を支援する継続的な取り組みの一環として、micro:bit V1 向けにこのランタイムを開発しました。これは高水準言語が利用できる有用な関数群を提供し、C または C++ での micro:bit のプログラミングを容易にします。MakeCode で使う ‘ブロック’ の多くは、DAL が提供する関数を直接呼び出しています。micro:bit ランタイム DAL は C/C++ で書かれており、Arm Mbed HAL を基盤としています。
micro:bit DAL の主要コンポーネントは次のとおりです:
- micro:bit が同時に複数のタスクを実行できるようにするスケジューラ。
- リアクティブなコードを書けるようにする、メッセージバスと呼ばれるイベントシステム。ボタンのクリックから無線でメッセージを受信することまで、micro:bit 上で何かが起きたときにプログラムへ通知できます。
- LED ディスプレイ、センサー、ファイルシステム、無線、Bluetooth プロファイルなど、micro:bit の主要なハードウェアブロックを表すデバイスドライバー。
- メモリ管理の複雑さからプログラムを安全に保つのに役立つマネージド型。もともとは高水準言語で活用するために実装されましたが、C/C++ プログラマにとっても非常に有用であることが分かっています。
より低レベルなハードウェアアクセスを求める開発者は、micro:bit V1 を Mbed HAL を直接使用してプログラムすることもできます。
コンポーネント指向デバイス抽象化レイヤー (CODAL)- V2
コンポーネント指向デバイス抽象化レイヤー (CODAL) は、micro:bit の各ハードウェアコンポーネントをソフトウェアコンポーネントとして抽象化する、DAL ランタイムの発展形です。CODAL は、micro:bit V2 デバイスを含む、さまざまなデバイスとプロセッサをサポートします。最新の micro:bit 向けには、専用の CODAL ターゲットが作成されています:
micro:bit CODAL の主要コンポーネントは次のとおりです:
- 非同期のハードウェアイベントおよびソフトウェアイベントをイベントハンドラに対応付ける仕組みを提供する、統一イベントサブシステム(すべてのコンポーネントに共通);
- リソースロックのプリミティブの必要性を最小限に抑えながら並行性を実現する、非プリエンプティブなファイバースケジューラ。
- マネージド型の基盤を提供する、参照カウントに基づくシンプルなメモリ管理システム。
- マイクロコントローラのハードウェアコンポーネントを高水準のソフトウェアコンポーネントに抽象化するドライバー群。各コンポーネントは C++ クラスで表現されます。
- 物理デバイスを表現する、これらのコンポーネントから構成されたパラメータ化オブジェクトモデル。
(出典: MakeCode and CODAL - 教育向けの直感的で効率的な組み込みシステムプログラミング)
CODAL のビルド
CODAL をビルドするための手順 は現在、micro:bit samples リポジトリにあります。このリポジトリを clone して、source フォルダからサンプルをビルドできます。最終的なリンクは未定であり、変更される可能性があります。
micro:bit ランタイムへの貢献
micro:bit ランタイムは MIT ライセンスのもとで配布されているオープンソースプロジェクトであり、micro:bit コミュニティからの貢献と協力を大いに歓迎しています。micro:bit ランタイムにマージできるものはまだ多くあり、また MakeCode が進化して新機能を追加していく中で、ランタイムに入るものがうまく機能し、教育におけるコーディングに役立つことが証明されれば、それらは高水準言語にも公開できます。
まず、micro:bit ランタイム DAL をビルドできる環境を整える必要があります。Mbed.org を通じて Web ブラウザ内で利用できるオンラインビルド環境、またはダウンロード可能なコンパイラのいずれかを選べます。入門ドキュメント がこの手順を案内します。
機能の要望とバグ報告
機能要望がある場合、または micro:bit ランタイム開発に参加したい場合は、未解決の issue の一覧 を確認し、まだ登録されていなければ新しい issue を作成してください。
DAL でバグを見つけたと思われる場合は、GitHub の DAL リポジトリに新しい issue を登録してください
DAL ソースコード
Arm Mbed (v1 のみ)
Arm Mbed に関する情報は V1 にのみ適用されます。
ハードウェアと低レベルソフトウェア
micro:bit のハードウェアは Mbed HDK をベースとしており、ソフトウェアは Mbed SDK をベースとしています。Mbed プラットフォーム上で動作するプログラムは、必要な周辺機器とメモリが備わっていれば、どれも micro:bit 上で動作します。これは、micro:bit を使用する開発者が、micro:bit で利用できる膨大な コンポーネントライブラリ にすでにアクセスできることを意味します。さらに、micro:bit 上で開発されたものを他の Mbed プラットフォームでも利用できることを意味します。 特に興味深いのは Mbed BLE プロジェクトで、その多くは micro:bit と非常によく似た nRF51 ベースのハードウェア上で開発されました。Mbed の Bluetooth Low Energy Team には、有用なリンクやサンプルが多数あります。
オンライン IDE
Mbed は、micro:bit をプログラムできるオンライン C/C++ IDE も提供しています。これを使い始めるには、Mbed サイトの micro:bit Platform Page を参照してください。そこには入門用の動画があります。
Mbed ソースコードと使用されているバージョン
micro:bit 用の Mbed リポジトリは https://github.com/lancaster-university/mbed-classic です。これは、micro:bit プロジェクトに必要な変更と修正を加えた Mbed OS 2 (classic) のフォークです。これは、オフライン DAL ツールチェーン、Mbed Online Compiler、および microbit.org のオンラインエディター で使用されている Mbed のバージョンです。
micro:bit は、Mbed 5 と互換性のある、十分に実績のある Mbed 2.0 SDK を基盤としていました。現在、micro:bit ランタイムを Mbed 5 に移行する 作業が進められています。
Nordic nRF5 SDK
Nordic チップ向けの Mbed 抽象化レイヤーは、Nordic nRF5 SDK https://www.nordicsemi.com/eng/Products/Bluetooth-low-energy/nRF5-SDK の上に構築されています
特に重要なのは、これに Nordic の Soft Device 110 V1 / Soft Device 113 V2 が含まれていることで、これは micro:bit 用のあらゆる hex ファイルに組み込まれるバイナリオブジェクトであり、無線の制御を管理して、micro:bit が業界標準の Bluetooth Low Energy プロトコルを使用できるようにします。
SoftDevice はユーザーコードと同じ MCU 上で動作し、Mbed BLE API(micro:bit ランタイムも使用しています)を使用すると、呼び出しは SoftDevice に対して行われます。SoftDevice は最優先の割り込みも占有するため、無線を正しく機能させるために必要な場合、ユーザーコードは SoftDevice によってプリエンプトされることがあります。
V1 のみ。micro:bit プログラムはデフォルトで SoftDevice S110 を使用します。これにより、デバイスは GAP Peripheral としてのみ動作できます。Mbed でオフラインコンパイルすることで micro:bit とともに Soft Device S130 を使用することも可能ですが、それはこのドキュメントの範囲外です。