2019/08/18

Zephyr (9)

Zephyrで、自分用のボード設定を作ろう!

私が使っているのはnRF51822のrevision 2。CEAAなので、FLASHが256kB、SRAMが16kBだ。
GPIOは開放されているので、こっちで好きに使ってよい。

HR serviceを使ったサンプルですらSRAMの使用量は93%近くあるので、余裕を持って作りたいなら32kB以上はSRAMがほしいところだ。


新しいボードをサポートしたい場合はテンプレートを使ってくれ、と書いてある。が、これはドキュメントのテンプレートであってボード設定のテンプレートではない。

https://docs.zephyrproject.org/latest/boards/index.html

今回は、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に置いておこう。

https://github.com/hirokuma/zephyr_boards_arm_nrf51_bvmcn51/tree/89f64c97200c7477008342182a447dfbb1e8cc7c

west flashで焼けるのが便利ですな。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。