h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ

メタ情報
RSS
Login

arduino-esp32のCore Debug Level

arduino-esp32のライブラリのソースを見ると log_e()やlog_v()で 各種メッセージが出力されている ()。 これらのメッセージは Arduino IDEだと メニューのツール→Core Debug Levelで設定で 出したり出さなかったりできる。

platformioだと platformio.iniでbuild_flagsを指定してやればいい。

platformio.iniの例

[env:m5stack-core-esp32]
platform = espressif32
board = m5stack-core-esp32
framework = arduino
upload_port = COM39
monitor_port = COM39
monitor_speed = 115200
build_flags =
  -DCORE_DEBUG_LEVEL=3  ; 0:None, 1:Error, 2:WARN, 3:Info, 4:Debug, 5:Verbose

log_iの出力はシリアルポートに出力される。 例を下に示す。

[I][BLEDevice.cpp:593] addPeerDevice(): add conn_id: 0, GATT role: client
Connected
[I][main.cpp:91] loop(): connection succeeded.
Notify callback for characteristic ebe0ccc1-7a0a-4b0c-8a1a-6ff2997da3a6
temp = 20.5 : humidity = 25.0
Disconnected
[I][BLEDevice.cpp:604] removePeerDevice(): remove: 0, GATT role client
[I][main.cpp:88] loop():

[I]で始まる行がlog_iの出力で、 最初の行は 下の行 で出力されたものである。

log_i("add conn_id: %d, GATT role: %s", conn_id, _client? "client":"server");

つまり[I][BLEDevice.cpp:593] addPeerDevice():の部分は 自動で出力されている。 この辺の定義は esp32-hal-log.hにあるので興味がある人は 見て欲しい。

ポイントはソースファイル名がフルパスではなくファイル名だけ表示されているところ。 ソース中に __FILE__と書けば、コンパイル時にソースファイル名の文字列に 置換されるので printfデバッグでは下の行のテンプレートを 用意しソース各所に挿入してやると便利。

fprintf(stderr, "%s(%s:%d)\n",__FUNCTION__,__FILE__,__LINE__);

しかし、Arduionoでこれをやると、ソースファイルがかなり深いディレクトリーにあるので __FILE__がとんでもなく長くなりメッセージが読み難い。 仕方がないのでArduinoではファイル名は諦めて以下の行を挿入していた。

Serial.printf("%s:%d\n", __FUNCTION__,__LINE__);

ちなみに esp8266やesp32のarduinoでは Serial(Printクラス)でprintf()が使える。

log_iでは、どうしているかと調べたら __FILE__を直接使うのではなく pathToFileName()という関数を通して使用していた。 分かってしまえば簡単だが、なかなか自分でやる気は起きなった。

今後はprintfデバッグでlog_iあたりを使うことにしようと思う。