Open2
ESP32 の開発を加速する PlatformIO のプロジェクト設定
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 >
upload_speed
ビルドしたイメージを転送する際のシリアル速度を設定できる。
開発ボードに載ってる USB シリアル変換 IC の対応速度のリストから、なるべく早い速度を指定すると、ビルドしたイメージの転送にかかる時間が短くなる。ただし、速くし過ぎると転送に失敗することがあるので注意。
対応している速度は IC のデータシートを見ればわかる。例えば手持ちの開発ボードには CH340 が載っているが、この石は ..., 115200, 128000, 153600, 230400, 460800, 921600, 1500000, 2000000
に対応しているので、2 番目に速い 1500000
を指定している。
platformio.ini
upload_speed = 1500000