はじめに
MMBasicにも他のプログラミング言語にもある自作の関数やサブルーチンを標準の関数やコマンドのように他のプログラムから利用できるようにするライブラリ機能や大きなプログラムを分割して保存し、分割したプログラムをまとめて実行できるようにするフラッシュスロットという機能がある。ここではそれらの使い方をまとめた。
ライブラリ機能
ライブラリは、作成した関数やサブルーチンをフラッシュメモリ内の特定の領域に保存して標準の関数やライブラリと同じように利用できる機能のことである。
PicoMite(MMBasic)ではライブラリは次の手順で作成する。
- ライブラリにする関数やサブルーチンを作成し、正しく動作するかをテストする
- プログラムメモリにライブラリにするプログラムだけにし、それ以外のプログラムを削除する
-
LIBRARY SAVE
コマンドでプログラムメモリのプログラムをライブラリに追加します。この操作でプログラムメモリは空になる
プログラムメモリ内にはライブラにした関数やサブルーチンと同じ名前の関数やサブルーチンがあるとが実行時に名前の重複エラー(Error : Duplicate name)が発生するので注意する。
ライブラリに保存されたコードは余分な空白、コメント、空白行などを削除して圧縮されて領域を効率的に使用します。
ライブラリはRaspberry Pi Picoのフラッシュメモリ内に専用の領域に保存されます。ライブラリの使用状況はMEMORY
コマンドで確認できます。
> MEMORY
Program:
1K ( 0%) Program (41 lines)
127K (100%) Free
Library: ← ライブラリの領域
1K ( 1%) Library
127K (99%) Free
Saved Variables:
16K (100%) Free
RAM:
0K ( 0%) 0 Variables
0K ( 0%) General
156K (100%) Free
>
ライブラに保存されたプログラムはLISTやEDITコマンドでは表示できないのでライブラリのプログラムのリストを表示するLIBRARY LIST
コマンドを使用する。
以下に実行例を示す。3軸加速度センサー+3軸ジャイロセンサーのデータを取得するで作成した関数が保存されているのが確認できます。
> LIBRARY LIST
Function ReadWordToSigned16(ADDR As Integer, REG As Integer) As Integer
Local data%(2), tmp
I2C WRITE ADDR, 0, 1, REG
I2C READ ADDR, 0, 2, data%()
tmp = data%(0) << 8 Or data%(1)
If tmp >= &H8000 Then tmp = tmp - &H10000
ReadWordToSigned16 = tmp
End Function
ライブラリ操作コマンド
ライブラリ操作コマンドを次の表に示します。
コマンド | 内容 |
---|---|
LIBRARY SAVE | プログラムメモリにあるコードの冗長なデータを削除してライブラリ領域に保存する |
LIBRARY DELETE | ライブラリを削除し、フラッシュスロット3を開放します |
LIBRARY LIST | ライブラリの内容を一覧表示する |
LIBRARY LIST ALL | ページ確認なしにライブラリの内容を一覧表示する |
LIBEARY DISK SAVE fname$ | 現在のライブラリをファイルfname$として保存する |
LIBEARY DISK LOAD fname$ | ライブラリファイルfname$をライブラリメモリにロードする |
ライブラリをファイルとして保存
ライブラリを保存、復元、配布できるようにするには'LIBRARY SAVE'コマンドを使います。このコマンドを使うとライブラリをファイルとしてフラッシュファイルシステムに保存します。
ライブラリファイルの拡張子はlib
になる。拡張子を省略した場合には自動的に付加される。
ファイル化することでXMODEMなどのシリアル通信でMacなどのコンピュータに転送できます。
ライブラリ保存の実行例を示します。FILESコマンドでフラッシュファイルのファイルのリストを取得できます。
> LIBRARY DISK SAVE "ReadWordToSigned16"
> FILES "*.lib"
A:/
19:37 15-05-2025 252 ReadWordToSigned16.lib
0 directories, 1 file, 634880 bytes free
>
フラッシュスロット
PicoMiteにはプログラムメモリのプログラムとは完全に異なるプログラムや作業中のプログラムの以前のバージョンを保存できるフラッシュスロットという領域が3つ用意されています。
フラッシュスロットを使うとプログラムメモリの内容や変数と設定を保持したままでフラッシュスロットに保存されている別のプログラムを読み込んで実行できます。この機能をチェーン
といいます。
チェーン機能を使うとプログラムメモリに格納できない大きなプログラムを分割して保存し、まとめて実行できるようになります。
フラッシュスロットコマンド
フラッシュスロット操作コマンドを次の表に示します。
コマンド | 機能 |
---|---|
FLASH SAVE n | プログラムメモリ内のプログラムをフラッシュスロットnに保存する |
FLASH LOAD n | フラッシュスロットnのプログラムをプログラムメモリに読み込む |
FLASH RUN n | フラッシュスロットnからプログラムを実行する。すべての変数はクリアされるが、プログラムメモリの内容は保持される |
FLASH LIST | フラッシュスロット内のプログラムの最初の行とフラッシュスロットの一覧を表示する |
FLASH LIST n[, ALL] | フラッシュスロットnに保存されているプログラムをページ区切りで一覧表示。ALLを指定するとページ区切りしない |
FLASH ERASE n | フラッシュスロットnの内容を消去する |
FLASH ERASE ALL | すべてのフラッシュスロットの内容を消去する |
FLASH CHAIN n | すべての変数をそのままに、フラッシュスロットnのプログラムを実行する |
FLASH OVERWRITE n | フラッシュスロットnの内容を消去し、プログラムメモリの内容をそのスロットに保存する |
FLASH DISK LOAD f$ [, O[VERWRITE]] | LIBRARY DISK SAVEコマンドで作成されたバイナリファイルを作成されたバイナリファイルをフラッシュスロットに読み込む。Oを指定するとスロットを上書きする |
FLASHコマンドの利用例
ライブラリを利用しているだけの状態(スロット3をライブラリに使用)でFLASH LIST
コマンドの実行例を以下に示します。
スロット1と2は空で利用可能なことがわかります。
> FLASH LISR
Slot 1 available
Slot 2 available
Slot 3 in use: Library
次のプログラムを使ってフラッシュスロットの利用を試してみます。
' Print 1 -> 10
For i = 1 To 10
Print i;
Next i
Print
プログラムメモリの内容をフラッシュスロット1に保存
上記のプログラムをFLASH SAVE
コマンドを使ってフラッシュスロット1に保存します。フラッシュスロットにファイルを保存してもプログラムメモリの内容は消えません。
> FLASH SAVE 1
フラッシュスロットのリスト表示
FLASH LIST
コマンドでフラッシュスロットのリスト表示を表示できます。保存されているプログラムの1行目のみが表示されます。
> FLASH LIST
Slot 1 in use: "' Print 1 -> 10" ← プログラムが保存されている
Slot 2 available
Slot 3 in use: Library
フラッシュスロット1のプログラムのリスト表示
フラッシュスロットのプログラムを表示するにはFLASH LIST n
コマンドを使います。nはスロットの番号です。
> FLASH LIST 1
' Print 1 -> 10
For i = 1 To 10
Print i;
Next i
Print
フラッシュスロット1のプログラムの実行
フラッシュスロットに保存されているプログラムはFLASH RUN n
コマンドで実行できます。
フラッシュスロット1のプログラムを実行した例を示します。
> FLASH RUN 1
1 2 3 4 5 6 7 8 9 10
チェーンの利用例
チェーンの機能を利用するために次のようにプログラムメモリの内容を変更して実行してみます。
最後の行のFLASH CHAIN 1
コマンドでフラッシュスロット1のプログラムを続けて実行するように指定しています。
' Print 11 -> 20
For i = 11 To 20
Print i;
Next i
Print
Flash Chain 1
実行するとチェーンしているプログラムも実行されていることがわかります。
> RUN
11 12 13 14 15 16 17 18 19 20
1 2 3 4 5 6 7 8 9 10 ← フラッシュスロット1のプログラムの実行結果
チェーンしたプログラムの実行が終わるとそれ以降にプログラムがあっても継続されないので注意する。