ファイル構成
nRF Connect SDK の Sample プログラムは、
ncs/nrf/samples/
もしくは、
ncs/zephyr/samples/
もしくは、
ncs/nrf/applications/
のディレクトリの中に入っている。
(ncs ディレクトリは、環境構築時に作成するディレクトリ)
それらを見てみると似た感じの構成になっている。
・CMakeLists.txt
・prj.conf
・Kconfig
・src/main.c
・build_circuitdojo_feather_nrf9160ns (プロジェクト作成時に動的に生成されるフォルダ)
・circuitdojo_feather_nrf9160ns.overlay(デフォルトのデバイスツリー設定を変更する場合に、自力で追加するファイル)
CMakeLists.txt
src ディレクトリ以下などに存在するソースファイルをプロジェクトに取り込むための定義ファイル的になもの。
Make ファイルもどき。
zephyr_library_sources() の中に tab や space 区切りで、ソースファイルのパスを記述してやるとプロジェクトに取り込まれる。
#
# Copyright (c) 2019 Nordic Semiconductor
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
cmake_minimum_required(VERSION 3.13.1)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(sample_project)
zephyr_library_sources(
src/main.c
src/Ethernet/wizchip_conf.c
src/Ethernet/socket.c
src/Ethernet/W5500/w5500.c)
上記の定義によって、
main.c
wizchip_conf.c
socket.c
w5500.c
が、プロジェクトに取り込まれる。
(その他の項目についての説明は省略)
prj.conf
ソースファイルの中でライブラリをインクルードするだけではプロジェクトには取り込まれない。
prj.conf にて、フラグを立てたり、必要なパラメータなどを指定してあげる必要がある。
Segger Embeded Studio(IDE)の Project メニューから Configure nRF Connect Project... をGUIで選択できる menu config がこのファイルに近いが、IDEで設定した内容は、動的に生成される build_circuitdojo_feather_nrf9160ns フォルダ以下のどこかのディレクトリに保存されるので、共通仕様については、prj.conf に記述しておく必要がある。
ここで記述した内容は、menu config に反映される。
#
# Copyright (c) 2019 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
CONFIG_FPU=y
CONFIG_NRF_MODEM_LIB=y
CONFIG_NRF_MODEM_LIB_SYS_INIT=n
CONFIG_STDOUT_CONSOLE=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_FLOAT_PRINTF=y
CONFIG_AT_CMD=y
CONFIG_REBOOT=y
CONFIG_LTE_NETWORK_MODE_LTE_M_GPS=n
CONFIG_LTE_LINK_CONTROL=n
CONFIG_LTE_AUTO_INIT_AND_CONNECT=n
CONFIG_NETWORKING=y
CONFIG_NET_SOCKETS_OFFLOAD=y
CONFIG_NET_SOCKETS=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y
CONFIG_NET_SOCKETS_SOCKOPT_TLS=n
CONFIG_NET_IPV6=n
CONFIG_NET_DHCPV4=y
CONFIG_NET_IPV4=y
CONFIG_NET_CONFIG_NEED_IPV4=y
CONFIG_NET_NATIVE=y
CONFIG_NET_TCP=y
CONFIG_HEAP_MEM_POOL_SIZE=2048
CONFIG_MAIN_STACK_SIZE=4096
CONFIG_SERIAL=y
CONFIG_UART_LINE_CTRL=n
CONFIG_UART_INTERRUPT_DRIVEN=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_CONSOLE_ON_DEV_NAME="UART_0"
CONFIG_MODEM_INFO=y
CONFIG_GPIO=y
CONFIG_SPI=n
CONFIG_NRFX_SPIM=y
CONFIG_NRFX_SPIM2=y
CONFIG_NRFX_SPIM3=y
CONFIG_DISK_ACCESS=y
CONFIG_DISK_DRIVER_SDMMC=y
CONFIG_SDMMC_OVER_SPI=y
CONFIG_FILE_SYSTEM=y
CONFIG_FAT_FILESYSTEM_ELM=y
CONFIG_DYNAMIC_INTERRUPTS=y
CONFIG_DYNAMIC_DIRECT_INTERRUPTS=y
これは、LTE通信 + SDカード&Ethernet Sheild のプログラムを書いたときの prj.conf。
(不要な項目も含まれているが、切り分けきれていない……)
Kconfig
フラグやパラメータのデフォルト値などを定義できる。
ここで記述した内容は、menu config に反映される。
#
# Copyright (c) 2020 Nordic Semiconductor ASA
#
# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
#
menu "TEST"
config W5500_RX_THREAD_STACK_SIZE
int "Stack size for internal incoming packet handler"
default 800
help
Size of the stack used for internal thread which is ran for
incoming packet processing.
config W5500_RX_THREAD_PRIO
int "Priority for internal incoming packet handler"
default 2
help
Priority level for internal thread which is ran for incoming
packet processing.
config W5500_TIMEOUT
int "IP buffer timeout"
default 100
help
Given timeout in milliseconds. Maximum amount of time
that the driver will wait from the IP stack to get
a memory buffer before the Ethernet frame is dropped.
endmenu
menu "Zephyr Kernel"
source "Kconfig.zephyr"
endmenu
src/main.c
ソースファイル。
main関数を定義する。
build_circuitdojo_feather_nrf9160ns
プロジェクト作成時に動的に生成されるフォルダ。
build_ターゲット基板名 で作られる。
circuitdojo_feather_nrf9160ns.overlay
デフォルトのデバイスツリー設定を変更する場合に、自力で追加するファイル。
ターゲット基板名.overlay という名称でつくる。
デバイスツリーは、基板の何番 PIN にどのデバイスがつながっているとか、
どのデバイスがどの割り込みの番号をつかうかなどの定義。
すでにめんどくさいことになっているが、慣れるしか無い。
続くかも(?)