R2P2ESP32

スタックサイズを拡張する

ビルド時にRuby VMタスクのFreeRTOSスタックサイズを上書きします。

Ruby VMは専用のFreeRTOSタスク(components/picoruby-esp32/picoruby-esp32.c)上で 動作しており、xTaskCreatePinnedToCoreで固定サイズのスタックとともに作成されます。 これはVMがオブジェクトを確保するヒープとは別物です。デフォルトは 8KB(PICORB_TASK_STACK_SIZE、バイト単位)です。

#ifndef PICORB_TASK_STACK_SIZE
#define PICORB_TASK_STACK_SIZE (1024 * 8)
#endif

深い再帰や、ローカル変数のフレームが大きいコードはこれを超えてクラッシュすることが あります。スタックオーバーフローが発生した場合は、これを増やしてください。

$ export PICORB_TASK_STACK_SIZE=16384  # 16KB
$ rake build

HEAP_SIZEやUSE_WIFIと同様、これはCMakeがプロジェクトを構成するときにしか 読み込まれません。すでにターゲットのセットアップをこれを 設定せずに実行済みの場合は、PICORB_TASK_STACK_SIZEをエクスポートした状態で やり直し、強制的に再構成してください。

$ export PICORB_TASK_STACK_SIZE=16384
$ rake setup_esp32   # ビルド対象のターゲットに合わせて
$ rake build

次のステップ

Ruby VMがオブジェクトのために使えるメモリ量を制御する設定については ヒープ領域を拡張するを参照してください。