Open2

ESP32 の開発を加速する PlatformIO のプロジェクト設定

hrkohrko

monitor_filters

PIO にはシリアルモニターの内容に時間などを付与するフィルター機能がある。

例えば、以下のように設定できる。

platformio.ini
build_type = debug ; esp32_exception_decoder のために必要
monitor_filters = esp32_exception_decoder, time, log2file

各フィルタの役割は以下の通り:

  • esp32_exception_decoder: 例外発生時のスタックトレースを人間が読める形に変換
  • time: 受信時刻を表示
  • log2file: シリアル出力を logs/device-monitor-*-*.log に保存

実際の出力はこんな感じになる。スタックトレースの有り無しでデバッグの効率は雲泥の差なので、esp32_exception_decoder は必ず有効にしておきたい。

02:48:09.763 > Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
02:48:09.768 >
02:48:09.768 > Core  1 register dump:
02:48:09.772 > PC      : 0x401cbf4f  PS      : 0x00060c30  A0      : 0x800dea9d  A1      : 0x3fff47f0
02:48:09.780 > A2      : 0x00000000  A3      : 0x3fff48a4  A4      : 0x00000007  A5      : 0x3ffd1bb8  
02:48:09.788 > A6      : 0x0000002f  A7      : 0x00000000  A8      : 0x800de1a4  A9      : 0x3fff47a0
02:48:09.794 > A10     : 0x00000001  A11     : 0x3ffd1cb8  A12     : 0x00000000  A13     : 0x3ffc7084  
02:48:09.802 > A14     : 0x3ffbf648  A15     : 0x3ffc47a4  SAR     : 0x00000018  EXCCAUSE: 0x0000001c
02:48:09.810 > EXCVADDR: 0x0000001c  LBEG    : 0x40091090  LEND    : 0x400910a6  LCOUNT  : 0x00000000  
02:48:09.818 >
02:48:09.818 >
02:48:09.818 > Backtrace: 0x401cbf4c:0x3fff47f0 0x400dea9a:0x3fff4810 0x400d8832:0x3fff4840 0x400d9f87:0x3fff48e0 0x400d9fb3:0x3fff4910
02:48:10.037 >
02:48:10.037 >   #0  0x401cbf4c:0x3fff47f0 in NimBLERemoteDescriptor::getRemoteCharacteristic() at .pio/libdeps/esp32-debug/NimBLE-Arduino/src/NimBLERemoteDescriptor.cpp:69
02:48:10.037 >   #1  0x400dea9a:0x3fff4810 in NimBLERemoteDescriptor::readValue() at .pio/libdeps/esp32-debug/NimBLE-Arduino/src/NimBLERemoteDescriptor.cpp:120
02:48:10.037 >   #2  0x400d8832:0x3fff4840 in subscribeHIDReportCharacteristics(NimBLEClient*, std::vector<NimBLERemoteCharacteristic*, std::allocator<NimBLERemoteCharacteristic*> > const&) at src/main.cpp:455
02:48:10.037 >   #3  0x400d9f87:0x3fff48e0 in subscribeToHIDService(NimBLEClient*) at src/main.cpp:481
02:48:10.037 >   #4  0x400d9fb3:0x3fff4910 in taskSubscribe(void*) at src/main.cpp:488
02:48:10.037 >
hrkohrko

upload_speed

ビルドしたイメージを転送する際のシリアル速度を設定できる。

開発ボードに載ってる USB シリアル変換 IC の対応速度のリストから、なるべく早い速度を指定すると、ビルドしたイメージの転送にかかる時間が短くなる。ただし、速くし過ぎると転送に失敗することがあるので注意。

対応している速度は IC のデータシートを見ればわかる。例えば手持ちの開発ボードには CH340 が載っているが、この石は ..., 115200, 128000, 153600, 230400, 460800, 921600, 1500000, 2000000に対応しているので、2 番目に速い 1500000 を指定している。

platformio.ini
upload_speed = 1500000