1
1

More than 1 year has passed since last update.

nRF Connect SDK:Kconfigを使って動作モードを変更する

Last updated at Posted at 2023-04-19

動作モードを変えたい

nRF5 SDK時代ではPreprocessor Definitionsという設定があり、ここに記述したものはDEFINEとしてプロジェクトに定義することができます。
image.png
この機能を使うことで、同じソースコードで複数のプロジェクトを作り、特定の機能や動作を変えて動かすことができたりしました。

例えば実機と評価ボードによるエミュレーターなどです。

ところがnRF Connect SDKではそのようなことができません。アプリケーションに対してビルドをいっぱい作ることはできますが、その中身を変えるというよりは使用するprj.confを変えることしかできません。
image.png
しかしprj.confを変えたところでこの中に独自の定義をすることはできないため、どれを選ぼうがたいして差がありません。強いて言うなら使わない(あるいは直接関係ない)であろうコンフィギュレーションを各prj.confでそれぞれ選んでおくと、ソースコード中で

main.c
if (IS_ENABLED(CONFIG_XXX)) {
...
} else if (IS_ENABLED(CONFIG_YYY)) {
...
}

みたいな記述は可能ですが、なんていうかこう・・・いかにもIT土方がやりそうなやり方でセンスのカケラもないですよね(笑)。

辛口ですんません・・・でもいいモノを作りたいならちゃんとしっかり勉強しよう!

独自の定義といえば

そうです、Kconfigを使います。ちなみにKconfigについては1年以上前に記事にしています。

が、実は当時さっぱり分かっていなかったんですよね・・・。というよりは、Segger Embedded Studio時代においてはKconfigで独自のdefineを定義してもGUIとして表示されないので分かりづらかったと表現するのが正しいのかも知れません。

Kconfigのメニューを増やす

NCS 2.0からはVSCode専用になったことでKconfigもGUI化しました。非常に分かりやすくなったと思います。
image.png

なんであんなにも使うのを渋っていたのか・・・(笑)

そして、なんと!Kconfigで記述した内容は実はここに追加することができるのです。最初に書いたようにビルドを使い分けたいのでラジオボタンを追加実装します。

source "Kconfig.zephyr"

choice
    prompt "Choose one of the following options"
    default SAMPLE_CHOICE_OPTION_A
    help
        Choose one.

config SAMPLE_CHOICE_OPTION_A
    bool "Option A"
    help
        Enable option A.

config SAMPLE_CHOICE_OPTION_B
    bool "Option B"
    help
        Enable option B.

config SAMPLE_CHOICE_OPTION_C
    bool "Option C"
    help
        Enable option C.

endchoice

このKconfigを追加して再度コンパイルします。KconfigのGUIに追加するにはVSCodeを再起動する必要がありますので、再起動してKconfigを確認してみると・・・。
image.png
ちゃんと増えています。選択してprj.confを保存すると
image.png
当然prj.confに追加されます。なお、Kconfigの中で

default SAMPLE_CHOICE_OPTION_A

を指定しているため、Aを選んだ場合はprj.confには何も追加されません。

明示的に記述されないだけでSAMPLE_CHOICE_OPTION_Aはdefineとしてプロジェクトに追加されます。

ChatGPTが吐き出してくれる(笑)

余談ですが、このKconfigはChatGPTがほぼ吐き出してくれます。ChatGPT震えるぜ・・・と思いましたが、これだけだとコンパイルエラーを起こしてしまいます。
image.png
上記のソースとどこが違うかと言うと・・・そうですね1行目にある

source "Kconfig.zephyr"

がありません。これがないとコンパイルエラーを起こしてしまいます。

ここに辿り着くまでにかなり苦労しましたよ、ええ・・・。

まとめ

これで従来と同じ使い方がまた一つできるようになりました(笑)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1