見出し画像

twESP32Sensor開発:昨日作った設定ツールでシリアルポートをモニターしていたらメモリ不足で再起動を繰り返す問題を発見

今朝は4時に助手の猫さんが起こしてくれました。
昨日作っていたtwESP32Sensorの設定ツールは、

  • ファームウェアの書き込み

  • Wifiやsyslogの送信先の設定

  • 設定のクリア

  • シリアルポートのモニター

ができるようになりました。
ファームウェアの書き込みで使っているesptoolコマンドは起動パラメータの順番が大事なようで
--baud 115200
をwrite_flash後のほうにもっていくと

esptool write_flash: error: argument <address> <filename>: Must be pairs of an address and the binary filename

のエラーが発生しました。
謎ですが解決したのでよしとします。

シリアルポートのモニター機能でしばらく動かしておくと、ESP32が再起動しているログを見つけました。

ESP32のファームは再起動しても最初から動作を始めるので、なんとなく機能しているように見えます。
気になるので調べることにしました。再起動の前に

'Backtrace: 0x400837d5:0x3ffcdbf0 0x4009549d:0x3ffcdc10 0x4009a815:0x3ffcdc30 0x401cf54f:0x3ffcdcb0 0x401cf596:0x3ffcdcd0 0x401cf4f7:0x3ffcdcf0 0x401cf85e:0x3ffcdd10 0x401d0375:0x3ffcdd30 0x401d0498:0x3ffcdd50 0x401d0761:0x3ffcdd90 0x401d077d:0x3ffcddb0 0x400d2e31:0x3ffcddd0 0x400d3141:0x3ffcddf0 0x400d513e:0x3ffce0b0 0x400d5345:0x3ffce190 0x400d61ce:0x3ffce280 0x400dd27d:0x3ffce2a0'

 というログが出力されていますが、これは、再起動する前にどのような処理をしていたかを示す手がかりです。
これを調べるツールを見つけました。Arduino IDEに組み込むタイプのツールもありましたが、

のようなサイトを見つけました。プログラムの実行ファイルをアップロードしてBacktraceの文字列を貼り付ければ結果がわかります。

どうやら、Bluetoothのデバイスログをsyslogに送信する時にデバイスの情報を文字列にする処理でメモリ不足が発生しているようです。
std:stringに関連しているようです。
詳しく調べて対策しようと思いますが、今朝は時間切れです。

明日に続く


開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。