フローズンモジュールを使う(RPiベアメタルMicroPython)

frozenmodule.png

RAMディスクが使えるようになったので、このPythonスクリプトをMicroPythonの起動時に自動実行させてみます。

フラッシュやSDカードを外部ストレージとして使える場合は、そのストレージに「boot.py」「main.py」というファイル名でスクリプトを保存しておけば、起動時に「boot.py」→「main.py」の順で実行されます。

ですが、作成中のRPiベアメタル版MicroPythonは、起動時に使えるストレージはありません。むしろそれが無いために、代用でRAMディスクを用意したのでした。

外部ストレージを持たないシステムでも、Pythonスクリプトを実行するための仕組みとして、MicroPythonには「フローズン・モジュール」という仕組みがあります。
この仕組みを使うと、PythonスクリプトをMicroPythonのファームウェア内に追加することができます。

スクリプトは、ソースコード形式およびコンパイル済みのバイトコード形式が使えます。

MicroPythonの実装でフローズン・モジュール関連の処理を有効にするには、ソースコードに

共通:
・マクロ「MICROPY_READER_VFS (MICROPY_VFS)」を定義(mpconfigport.hの中で)

ソースコード形式:
・マクロ「FROZEN_DIR」にソースコード形式のスクリプトのディレクトリを設定
・マクロ「MICROPY_MODULE_FROZEN_STR」を定義(一般的には、mpconfigport.hの中で)

バイトコード形式:
・マクロ「FROZEN_MPY_DIR」にバイトコード形式のスクリプトのディレクトリを設定
・マクロ「MICROPY_MODULE_FROZEN_MPY」「MICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool」を定義(一般的には、mpconfigport.hの中で)

を追加します。

フローズンモジュールの実行は

pyexec_frozen_module("ファイル名");

です。
モジュールがソースコード形式でもバイトコード形式でも区別はありません。

今回は、以下のようなコードを起動時に実行するようにしました。
1MBのRAMディスクを作成してルートにマウントし、そこへ’RAM disk.txt’というファイルを作成しています。

このスクリプトをMicroPythonの移植ソースがあるディレクトリ直下の「modules」へ配置し、バイトコード化して、main()の中から呼び出しています。

フローズンモジュールを有効にするために必要な、MICROPY_MODULE_FROZEN_STRやMICROPY_MODULE_FROZEN_MPYの定義は、STM32の実装を参考に、mpconfigport.hではなくMakefileの中で行いました。
この方法のメリットは、フローズンモジュールの利用の有無をMakefileの書き換えだけで設定できることです。

このフローズンモジュールの仕組みですが、概ね以下のようになっているようです。

・フローズンモジュールのバイトコードの生成はクロスコンパイラ(mpy-cross)で行う
・フローズンモジュール(ソースコード形式およびバイトコード形式)をMicroPythonに埋め込むためのCコードは、自動生成されてbuild/へ配置(frozen.c、frozen_mpy.c)
・このCコードには、外部から関数を検索・参照するための定数が含まれる(ソースコードフローズンモジュールはmp_frozen_str_names[]/mp_frozen_str_sizes[]/mp_frozen_str_content[]、バイトコードフローズンモジュールはmp_frozen_mpy_names[]/mp_frozen_mpy_content[])
・実行時にコードを参照するためにvfsの関数が使われている(らしい)

ゴールデンウイークも今日で終わりなので、次に集中して作業できるのは夏休みでしょうか。
あと、予定としては

・I2C
・SPI
・PWM
・I2S
・SDカード
・Pin AFクラス
・UARTクラス
・USBホストクラス
・USBデバイスクラス
・スクリーンコンソール
・グラフィックスライブラリの整備
・チュートリアルの整備
・サーボモータドライバ
・NeoPixelドライバ
・WizNetドライバ
・test suiteへの対応
・RPi2や3への対応
・Raspbianへの移植

といったことをやりたいなと思っているのですが、依存関係を考えるとまずはPin AFクラスの実装が必要な気がします。

コメント

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny

タイトルとURLをコピーしました