2022.11.10 2021.11.26 Coskx Lab
Micro:bitは初めてのコンピュータの体験を意図しているため,大規模なプログラムはできません。プログラムサイズの上限についての体験を紹介します。
2021.11.26にサイズ上限のについて書きましたが,現在はその時より制限がきつくなっています。
プログラムサイズの上限はMakecodeのバージョンによります。
この資料を書いているときのMakecodeのバージョン(「このアプリについて」記載):
makecode.microbit.orgのバージョン: 5.0.12
Microsoft MakeCodeのバージョン: 8.0.7
microbit ランタイムのバージョン: v2.2.0-rc6
codal-microbit-v2 ランタイムのバージョン: v0.2.40
新規プロジェクトを立ち上げて,何も書いていない,最初の状態は次のようなものです。
しかし,Hexファイルに保存すると,MakeCode画面では見えないけれど,舞台裏のプログラムがびっしり詰まっているため,ファイルのサイズは
1282kbyte(キロバイト)
になります。
プログラムを書き足して作り上げていくと次第にHexファイルのサイズは大きくなります。
そして,Hexファイルのサイズが
1400kbyte(キロバイト)
を超えたあたりで,micro:bitに転送書き込みしようとすると突然
のような警告が一瞬出るようになります。(プログラムが432byte大きすぎる)
この状態で書き込みは終了したように見えるのですが,micro:bitには書き込まれていません。
警告はダウンロードボタンの近くに数秒しか出ません。見逃さないようにする必要があります。(ちょと不親切ですね)
なお,この状態でHexファイルへのプログラム保存の時も,同様の警告が出ます。そしてHexファイルへの保存も失敗します。
プログラムサイズ限界を超えてから警告が出ますが,限界を超える前でも,あと何byte余裕があるということも示してほしいものです。(この点も不親切です。)
Hexファイルサイズで見ると差し引き,119kbyte(1400kbyte-1281kbyte)がMakeCodeで書き加えるプログラムの上限ということになります。
(JavaScriptで600行程度,意外と短い)
(2021.11.26の段階では同様な検証で,163kbyteをプログラムとして使用することができていたので,119kbyteはかなり厳しい制限になっています。)
昨年作成して動作確認しているプログラムがありまして,Hexファイルでは以前の上限16000kbyteぎりぎりのサイズでした。同じプログラムをHexファイルで今回保存しようとしたら,3324byte大きすぎと警告が出ました。(Hexファイルだと約200kbyteも変わるのに警告では約3kbyteしか変わっていない!!)Hexファイルのサイズでは単純に説明がつきませんね。)
Hexファイルサイズでの上限というのは目安に過ぎないようです。
警告が出てしまったら何らかの形でプログラムをスリム化する必要があります。
同じ動作をするプログラムでも,書き方を変えるとプログラムサイズを小さくすることができます。
体験から判ったことですが,配列の利用はプログラムサイズを大きくするようです。
Hexファイルに関する追加情報 (この情報は役立たないかも)
・MakeCodeの環境で,プログラムを作成するとき,ブロックで作ってもPythonで作ってもJavaScriptで作っても,Hexファイルのサイズは同じです。
・コメントを書き込んでいる場合,コメントを削除するとHexファイルサイズは小さくなります。
・変数名を短くしても,Hexファイルサイズは変わりません。
・関数名を短くしても,Hexファイルサイズは変わりません。
MakeCodeで Micro:bit v2 のプログラムを開発するとき,目安としてHexファイル保存時で1400kbyte程度がプログラムサイズの上限になります。
実際にはコード化されたプログラムサイズで上限が決まっているようです。
コード化されたプログラムサイズが大きすぎると,micro:bitへの書き込みあるいはHexファイル保存の際に警告が出ます。
プログラミングの際は時々,Hexファイルのサイズをチェックする必要があります。
プログラムサイズが大きくなりすぎたら,プログラムのスリム化を考えましょう。
Hexファイルは実行可能プログラム(コード化されたプログラム)を16進法表現で人間に読める型式にしたファイルです。プログラムが書き込まれるべきアドレスとバイナリデータ(実行可能プログラムを含む)が16進法表現で書き込まれています。
micro:bit ver2のflash ROM領域のサイズは512kbyteとなっています。この領域は電源を落としても消えないflash memoryなので,実行可能プログラムの保存に用いられています。