目次

puncover

puncover - Analyses C/C++ build output for code size, static variables, and stack usage
Tools for Firmware Code Size Optimizationを読んでいて見つけたツール

インストール

pipでインストールする

pip install puncover

以下の内容はpipでインストール可能になる前の話なので不要
記事にあるようにそのままpipでインストールしても動作しない.
仮想環境を作ってその上で実行したほうが良い.
Windws用のパッチを当てることと,Flask,Jinja2のバージョン依存を修正する必要がある.
このissue(Windows compatibility (.exe ARM tools) #37)にあるファイル(fixWindowsPaths.patch.txt)を使ってGitでパッチを当てる.
2022年6月30日時点で,幸いにも7日前に来れに対応するPR(Support python3.10 #49)がある.
この2つを実行することで,puncoverがWindowsで動くようになる.

elfファイルの準備

.elfファイルに必要な情報が入っている必要がある。
-g-fdebug-prefix-map=/=フラグを追加してビルドする

使い方

puncover --elf_file path_to_ele_file.elf

と打ち込めばブラウザが立ち上がるはず

>  puncover -h
usage: puncover [-h] [--gcc-tools-base GCC_TOOLS_BASE] --elf_file ELF_FILE [--src_root SRC_ROOT] [--build_dir BUILD_DIR] [--debug] [--port PORT] [--host HOST]
                [--no-open-browser] [--version]
 
Analyses C/C++ build output for code size, static variables, and stack usage.
 
optional arguments:
  -h, --help            show this help message and exit
  --gcc-tools-base GCC_TOOLS_BASE, --gcc_tools_base GCC_TOOLS_BASE
                        filename prefix for your gcc tools, e.g. ~/arm-cs-tools/bin/arm-none-eabi- (default: F:\ST\STM32CubeCLT_1.15.0\GNU-tools-for-STM32\bin/arm-none-      
                        eabi-)
  --elf_file ELF_FILE, --elf-file ELF_FILE
                        location of an ELF file (default: None)
  --src_root SRC_ROOT, --src-root SRC_ROOT
                        location of your sources (default: None)
  --build_dir BUILD_DIR, --build-dir BUILD_DIR
                        location of your build output (default: None)
  --debug               enable Flask debugger (default: False)
  --port PORT           port the HTTP server runs on (default: 5000)
  --host HOST           host IP the HTTP server runs on (default: 127.0.0.1)
  --no-open-browser     don't automatically open a browser window (default: False)
  --version             show program's version number and exit

参考文献

Optimization Tools¶ Zephyr docs
How to use puncover to estimate the maximum stack size of a thread