1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi PicoでPicoMite(MMBasic)を使う〜ライブラリとフラッシュスロットの利用

Last updated at Posted at 2025-05-15

はじめに

MMBasicにも他のプログラミング言語にもある自作の関数やサブルーチンを標準の関数やコマンドのように他のプログラムから利用できるようにするライブラリ機能や大きなプログラムを分割して保存し、分割したプログラムをまとめて実行できるようにするフラッシュスロットという機能がある。ここではそれらの使い方をまとめた。

ライブラリ機能

ライブラリは、作成した関数やサブルーチンをフラッシュメモリ内の特定の領域に保存して標準の関数やライブラリと同じように利用できる機能のことである。

PicoMite(MMBasic)ではライブラリは次の手順で作成する。

  1. ライブラリにする関数やサブルーチンを作成し、正しく動作するかをテストする
  2. プログラムメモリにライブラリにするプログラムだけにし、それ以外のプログラムを削除する
  3. 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

次のプログラムを使ってフラッシュスロットの利用を試してみます。

for1to10.bas
' 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のプログラムを続けて実行するように指定しています。

chain-example.bas
' 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のプログラムの実行結果

チェーンしたプログラムの実行が終わるとそれ以降にプログラムがあっても継続されないので注意する。

参考サイトなど

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?