micropython -- MicroPython の内部

MicroPython の内部にアクセスし、制御します。

const(value) Any

値を定数として宣言することで、コードを効率化します。

さらにメモリ使用量を減らすために、その名前の前にアンダースコア(_ORANGES)を付けます。こうすると、定数は同一ファイル内でのみ使えるようになります。

他のモジュールから値をインポートしたい場合は、アンダースコアのない名前(APPLES)を使います。この場合、もう少しメモリを消費します。

パラメータ:

value (int or float or str or tuple) -- 定数化するリテラル。

戻り値:

定数値。

heap_lock()

ヒープをロックします。ロックするとメモリの割り当てができなくなります。ヒープを割り当てようとすると MemoryError が発生します。

heap_unlock() int

ヒープをアンロックします。メモリ割り当てが再び許可されます。

heap_lock() が複数回呼ばれた場合、ヒープを再び利用可能にするには heap_unlock() を同じ回数だけ呼び出す必要があります。

戻り値:

ロック解除後のロックの深さ。ロックが解除されると 0 になります。

kbd_intr(chr)

入力ウィンドウに文字を入力したときに KeyboardInterrupt 例外を発生させる文字を設定します。デフォルトでは 3 が設定されており、これは Ctrl C を押したときに相当します。

パラメータ:

chr (int) -- KeyboardInterrupt を発生させる文字。この機能を無効にするには -1 を指定します。

mem_info()
mem_info(verbose) None

スタックとヒープのメモリ使用量に関する情報を表示します。

パラメータ:

verbose -- 何らかの値が与えられた場合、ヒープ全体も表示されます。これは、どのブロックが使用され、どのブロックが解放されているかを示します。

opt_level() int
opt_level(level: int) None

ハブでコンパイルされるコードの最適化レベルを設定します:

  1. アサーション文が有効になります。組み込みの __debug__ 変数が True になっています。スクリプトの行番号が保存され、例外発生時に報告されるようになります。

  2. アサーションは無視され、 __debug__False になります。スクリプトの行番号は保存されます。

  3. アサーションは無視され、 __debug__False になります。スクリプトの行番号は保存されます。

  4. アサーションは無視され、 __debug__False になります。スクリプトの行番号は保存されません。

通常のスクリプトはハブに送信される前にすでにコンパイルされているため、これはREPLで実行するコードにのみ適用されます。

パラメータ:

level (int) -- 設定するレベル。

戻り値:

引数を指定しない場合は、現在の最適化レベルを返します。

qstr_info()
qstr_info(verbose) None

文字列がどの数だけ隔離化されているか、どれだけの RAM を消費しているかを表示します。

これにより、同じ文字列のコピーを重複して保存する必要がなくなります。

パラメータ:

verbose -- 何らかの値を指定すると、RAM に隔離化したすべての文字列の名前も出力されます。

stack_use() int

使われているスタックの量をチェックします。これは、スクリプト内の異なるポイントでのスタック使用量の差を計算するのに使えます。

戻り値:

使用中のスタックの量。

サンプルコード

定数を利用した効率化

from micropython import const

# この値はここで使えます。他のファイルでもインポートできます。
APPLES = const(123)

# これらの値は、このファイル内でのみ使えます。
_ORANGES = const(1 << 8)
_BANANAS = const(789 + _ORANGES)

# 定数は通常の値として読めます。コンパイラは、定数に代えて数値を
# 挿入するだけです。
fruit = APPLES + _ORANGES + _BANANAS
print(fruit)

RAM の空き容量のチェック

from micropython import mem_info

# メモリの利用状況の表示。
mem_info()

これは、以下に示すフォーマットで情報を表示します。この SPIKE プライム ラージハブの例では、コード内の変数に対して257696バイト(251KB)分のメモリが残っています。

stack: 372 out of 40184
GC: total: 258048, used: 352, free: 257696
No. of 1-blocks: 4, 2-blocks: 2, max blk sz: 8, max free sz: 16103

より多くのメモリ統計情報の取得

from micropython import const, opt_level, mem_info, qstr_info, stack_use

# スタート時のスタックを取得。
stack_start = stack_use()

# REPL コンパイラの最適化レベルの表示。
print("level", opt_level())

# メモリの使用状況を表示。
mem_info()

# メモリ使用状況とメモリマップを表示。
mem_info(True)

# 隔離化文字列の情報を表示。
qstr_info()

# 隔離化文字列の情報とその名前を表示。
APPLES = const(123)
_ORANGES = const(456)
qstr_info(True)


def test_stack():
    return stack_use()


# スタックをチェック。
print("Stack diff: ", test_stack() - stack_start)