Zephyrで、自分用のボード設定を作ろう!
私が使っているのはnRF51822のrevision 2。CEAAなので、FLASHが256kB、SRAMが16kBだ。
GPIOは開放されているので、こっちで好きに使ってよい。
HR serviceを使ったサンプルですらSRAMの使用量は93%近くあるので、余裕を持って作りたいなら32kB以上はSRAMがほしいところだ。
新しいボードをサポートしたい場合はテンプレートを使ってくれ、と書いてある。が、これはドキュメントのテンプレートであってボード設定のテンプレートではない。
今回は、BLE Nanoに近い構成で、J-LINKだけPCA10028の設定を使いたいというだけなので、BLE Nanoをコピーして作れば良かろう。
Linuxの場合は、defconfigをコピーして.configにしてからmenuconfigでカスタマイズしていたのだが、Zephyrも似たようなツールがあるのだろうか?
・・・いかんいかん、先走っちゃいかんな。
まずはボードの設定を作ろう。
ファイルは6つ。
board.cmake
Kconfig.board
Kconfig.defconfig
XXX.dts
XXX.yaml
XXX_defconfig
XXXはボード名のようだ。
他にもファイルが置けるようだが、まあ今回はよかろう。
https://docs.zephyrproject.org/latest/application/index.html#boards
ファイルの中身を見ただけだが、だいたいこんなところだろうか。
board.cmake : west flashなどで使いそうな設定
Kconfig.board : menuconfigで使いそうな設定
Kconfig.defconfig : 自分のボードが有効なときにmenuconfigで使いそうな設定
XXX.dts : Device Tree Script、だったか。ボード/デバイスの設定。
XXX.yaml : マイコンの種別、RAMのサイズのような設定
XXX_defconfig : CONFIGのデフォルト値
今回のnRF51822はBVMCN5102を使っているので、XXXはnrf51_bvmcn51にしよう。
QFAAとかQFACとか設定があるのだが、dtsiを見るとFLASHとRAMのサイズで分けているだけのように見える。
51822_QFAA : FLASH=256, SRAM=16
51822_QFAB : FLASH=128, SRAM=16
51822_QFAC : FLASH=256, SRAM=32
となると、yamlファイルに書いてあるRAMサイズは人間用なのだろうか?
まあいいや。
そして、board.cmakeはPCA10028の設定を使う。
内蔵RCを使うようにもしておこう。
これくらいしか変更点が思いつかない。
peripheral_hrをビルドした。
Memory region Used Size Region Size %age Used
FLASH: 109535 B 256 KB 41.78%
SRAM: 17712 B 16 KB 108.11%
IDT_LIST: 152 B 2 KB 7.42%
あれー。
nrf51_blenanoを変更しただけなのに。。。
念のためボードをnrf51_blenanoにしてビルドすると、こっちもRAMオーバーした。
なんだこりゃ?
昨日はなんだったのだ??
WSL版でも同じようになったから、そうなんだろう。
CONFIG_SERIALやCONFIG_CONSOLEをnoにしていったが、さほど効果無し。
zephyrがmasterブランチだったので、v2.0.0-rc1タグにしたが、変わらん。
うーん、今日、west build系がなぜかうまくいかなかったのでbuild/ごと削除したのだが、それが原因だろうか。原因というか、昨日はキャッシュが効いたままになってて、なんか外れた状態になっていたのか?
zephr_prebuilt.mapを見てみる。大きいのはこの辺か。
bss 0x1810
noinit 0x2551
datas 0x05cb
なんか、ちょこちょこlogという名前が出てくる。
そういえば、prj.confから削った気がする。
CONFIG_BT_DEBUG_LOG=n
CONFIG_PRINTKなんかがnだったので消えるんだろうと思っていたが、prj.confに入っているからリンクされるのか。
prj.confを書き換え、buildディレクトリごと削除して、west build。
>west build -b nrf51_blenano samples\bluetooth\peripheral_hr –pristine
Memory region Used Size Region Size %age Used
FLASH: 86591 B 256 KB 33.03%
SRAM: 15364 B 16 KB 93.77%
IDT_LIST: 152 B 2 KB 7.42%
効くねぇ。
では、BVMCN51でビルドし直す。
Memory region Used Size Region Size %age Used
FLASH: 85667 B 256 KB 32.68%
SRAM: 15328 B 16 KB 93.55%
IDT_LIST: 152 B 2 KB 7.42%
微妙な差は、CONFIG_SERIALやCONFIG_CONSOLEをnoにしているからか?
BLE Nanoと同じ設定にしてビルドし直す。
Memory region Used Size Region Size %age Used
FLASH: 86591 B 256 KB 33.03%
SRAM: 15364 B 16 KB 93.77%
IDT_LIST: 152 B 2 KB 7.42%
同じになった。
内蔵RCを使ったとしても引数が変わるだけだから、その差は無いみたいだ。
CONFIG_COMPILER_OPT=”-O3”を設定するとこうなった。
Memory region Used Size Region Size %age Used
FLASH: 134582 B 256 KB 51.34%
SRAM: 15380 B 16 KB 93.87%
IDT_LIST: 152 B 2 KB 7.42%
CONFIG_SIZE_OPTIMIZATIONS=yでは変わらず。デフォルトがそうなのか。
consoleは使わないがUARTは使いたいので、CONFIG_SERIAL=yにしておこう。
Memory region Used Size Region Size %age Used
FLASH: 86383 B 256 KB 32.95%
SRAM: 15348 B 16 KB 93.68%
IDT_LIST: 152 B 2 KB 7.42%
ちなみに、LOG_BACKEND_RTTとUSE_SEGGER_RTTをyesにするとRAMがあふれてしまった。
動いてそうなので、GitHubに置いておこう。
west flashで焼けるのが便利ですな。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。