2018/05/06RAMディスクが使えるようになったので、このPythonスクリプトをMicroPythonの起動時に自動実行させてみます。フラッシュやSDカードを外部ストレージとして使える場合は、そのストレージに「boot.py」「main.py」というファイル名でスクリプトを保存しておけば、起動時に「boot.py」→「main.py」の順で実行されます。作成中のRPiベアメタル版MicroPythonは、起動時に使えるストレージはありません。それが無いために、代用でRAMディスクを用意したのでした。外部ストレージを持たないシステムでも、Pythonスクリプトを実行するための仕組みとして、MicroPythonには「フローズン・モジュール」という仕組みがあります。この仕組みを使うと、PythonスクリプトをMicroPythonのファームウェア内に追加することができます。スクリプトは、ソースコード形式およびコンパイル済みのバイトコード形式が使えます。・マクロ「MICROPY_MODULE_FROZEN_MPY」「MICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool」を定義(一般的には、mpconfigport.hの中で)を追加します。フローズンモジュールの実行はpyexec_frozen_module("ファイル名");です。モジュールがソースコード形式でもバイトコード形式でも区別はありません。今回は、以下のようなコードを起動時に実行するようにしました。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の関数が使われている(らしい)ゴールデンウイークも今日で終わりなので、次に集中して作業できるのは夏休みでしょうか。AFクラスの実装が必要な気がします。PiMicroPythonboochow楽しくやろう。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。Pi元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org楽しくやろう。元マイコン少年が、調べたことや作ったものを気まぐれに紹介するブログです。(9)メタ情報ログイン投稿フィードコメントフィードWordPress.org。