ヒープ領域を拡張する
ビルド時にRuby VMのヒープサイズを上書きします。
Ruby VMのヒープは、components/picoruby-esp32/picoruby-esp32.cで確保される
固定サイズのプールです。デフォルトサイズはビルド内容によって異なります。
| 条件 | デフォルトのHEAP_SIZE |
|---|---|
CONFIG_SPIRAMが有効(パーティション / sdkconfigs/spiramを参照) |
1MB(PSRAMから確保) |
| SPIRAMなし、FemtoRuby(mruby/c) | 100KB |
| SPIRAMなし、PicoRuby(mruby) | 220KB |
上書きする
ビルド前にHEAP_SIZE環境変数(バイト単位)を設定します。
$ export HEAP_SIZE=524288 # 512KB
$ rake build
USE_WIFI(Wi-Fiを有効にするを参照)と同様、これはCMakeがプロジェクトを
構成するときにしか読み込まれません。すでにターゲットのセットアップを
これを設定せずに実行済みの場合は、HEAP_SIZEをエクスポートした状態でやり直し、
強制的に再構成してください。
$ export HEAP_SIZE=524288
$ rake setup_esp32 # ビルド対象のターゲットに合わせて
$ rake build
SPIRAMがない場合、ヒープは単純な静的配列(uint8_t heap_pool[HEAP_SIZE])です。
そのため、そのチップの内部RAMでは実際には確保できないようなHEAP_SIZEを指定すると、
リンクエラーになるか、実行時に失敗します。CONFIG_SPIRAMが有効な場合は、代わりに
heap_caps_mallocでPSRAMから確保されるため、はるかに余裕があります(SPIRAM対応の
ボードはデバイスを参照)。
次のステップ
ヒープではなく、Ruby VMタスク自体のFreeRTOSスタックを制御する設定については スタックサイズを拡張するを参照してください。
このページの内容