概要
Sourcetrailという、ソースコード分析ツールがオープンソース化して、無料で使えるようになったので、Arduino core for the ESP32を分析してみました。
セットアップ
上記からSourcetrail_2019_4_61_Windows_64bit_Portable.zipをダウンロードしてきて、展開しました。
セットアップしなくても使えるポータブル版があるのは便利です。
使い方
New Project
プロジェクトの名前と、保存場所を設定します。プロジェクト名はなんでも大丈夫で、保存場所は環境変数を入れるとおかしな動きをしたので、絶対PATHで指定してください。
標準的な保存場所は実行ファイルがあるPATH直下の「user\projects\プロジェクト名」です。
Add Source Group
Empty C++を選びました。
C++のバージョンは、Arduino IDEのコンパイルオプションから確認して「gnu++11」を選択。
ソースファイルは「%USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/」を指定しました。セットアップしているバージョンに合わせて変更してください。
「show file」ボタンで対象となるファイルが含まれているかを確認してから、次に進みます。不要なファイルが含まれていたらExcluded設定で除外します。
「%USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/ESP32/examples/Camera/CameraWebServer/app_httpd.cpp」は除外してもいいかもしれません。
ここが一番面倒で、ワイルドカードが使えないので、Include Pathを右下の鉛筆マークを押してから、テキストで流し込みます。
C:/Program Files (x86)/Arduino/hardware/tools/avr/lib/gcc/avr/7.3.0/include %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/tools/xtensa-esp32-elf-gcc/1.22.0-80-g6c4433a-5.2.0/xtensa-esp32-elf/include/c++/5.2.0 %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/cores/esp32 %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/config %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/app_trace %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/app_update %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/asio %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/bootloader_support %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/bt %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/coap %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/console %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/driver %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp-tls %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp32 %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_adc_cal %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_event %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_http_client %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_http_server %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_https_ota %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp_ringbuf %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/ethernet %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/expat %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/fatfs %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/freemodbus %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/freertos %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/heap %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/idf_test %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/jsmn %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/json %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/libsodium %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/log %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/lwip %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/mbedtls %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/mdns %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/micro-ecc %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/mqtt %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/newlib %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/nghttp %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/nvs_flash %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/openssl %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/protobuf-c %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/protocomm %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/pthread %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/sdmmc %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/smartconfig_ack %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/soc %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/spi_flash %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/spiffs %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/tcp_transport %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/tcpip_adapter %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/ulp %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/vfs %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/wear_levelling %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/wifi_provisioning %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/wpa_supplicant %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/xtensa-debug-module %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp-face %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp32-camera %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/esp-face %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/tools/sdk/include/fb_gfx %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/ArduinoOTA/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/AsyncUDP/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/AzureIoT/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/BLE/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/BluetoothSerial/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/DNSServer/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/EEPROM/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/ESP32/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/ESPmDNS/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/FFat/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/FS/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/HTTPClient/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/HTTPUpdate/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/NetBIOS/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/Preferences/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SD/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SD_MMC/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SimpleBLE/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SPI/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/SPIFFS/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/Ticker/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/Update/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WebServer/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFi/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFiClientSecure/src %USERPROFILE%/AppData/Local/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/Wire/src
私が指定したのは、上記です。M5StickCなど他のライブラリを解析するときにも、上記のリストをベースに増減するとうまくいくと思います。
こちらも設定したら「validate include directives」ボタンで、エラーが発生していないか調べます。何個か他の環境用のファイルが見つかっていませんが、必要そうなのが揃っていたら無視しても構わないと思います。
「mbedtls/esp_config.h」を読み込ませる設定が入っていないからな気もします。
Globalの方は、たぶんいらないので消せるのは消します。
Compiler Flagsはちゃんと指定したほうがいいかもしれませんが、全部削除。
New Project
設定が完了すると、最初の画面に戻ってきますので「Create」で作成します。この画面は作成したあとでも、ProjectメニューEdit Projectで開くことができます。
Start Indexing
Startで分析を開始します。この画面はEditメニューからRefreshで開けます。
初期画面
エラーが何個かでていますが、分析完了しました。
HardwareSerialを見てみる
こんな感じの構成が見えます。
HardwareSerial::writeを見てみる
こんな感じで、関係と右側にソースと宣言が開きます。
Doxygenと比べる
- HardwareSerial.cpp
- HardwareSerial クラス
- HardwareSerial::write
Doxygenはテキストがメインで、構造は図ではなく情報から自分で組み立てる必要があります。
Sourcetrailはきれいですが、Doxygenなどに使うドキュメントブロックは認識しません。Doxygenできれいに管理されているのであれば、 Doxygenで見たほうが楽かもしれません。
まとめ
人によってデータ解析の方法が違うので、図で認識する人はSourcetrailを使ったほうが便利だと思います。文字で認識する人はDoxygenかなー。
DB定義書がER図じゃないと構造が頭に入りにくい人と、脳内デバッグするからSQL文とサンプルデータの方がいい人がいるみたいな感じだと思います。
コメント