【NCS随笔】
SEGGER添加方式
在介绍NCS工程之前,我们先看看大家熟悉的SEGGER工程(Keil同理):
左边的项目栏可以看到工程的配置,通过点击 User Include Directories添加头文件路径
对工程或者文件夹鼠标右击就可以添加文件或者.c文件管理文件等操作。
可以看出,Segger添加源文件和目录的方式比较直观,但是如果文件比较多,路径比较深的话效率就会比较低下。
NCS 构建
Zephyr 使用CMake作为构建系统,CMake 是一个跨平台的构建工具,它通过读取CMakeLists.txt
文件来生成平台特定的构建文件,
Zephyr 的构建系统基于GNUMake和CMake,但 CMake 是主要的配置入口。每个 Zephyr 项目(应用程序、驱动或模块)都需要一个或多个CMakeLists.txt
文件来定义构建规则
我们可以打开一个例程参考,我这里使用ncs3.0.0的peripheral_uart例程
cmake_minimum_required
:指定所需的最低 CMake 版本。find_package(Zephyr)
:查找并加载 Zephyr 的 CMake 工具链和模块project
:定义项目名称,通常与应用程序名称一致target_sources
:指定项目的源文件路径(如.c
、.cpp
文件)
我们选择一个更加复杂的例程来分析v3.0.0\nrf\applications\nrf_desktop
-
cmake_minimum_required:要求 CMake 版本至少为 3.20.0
-
APPLICATION_CONFIG_DIR:设置应用配置文件目录,根据目标开发板动态调整(如
configuration/nrf52840dk_nrf52840
) -
find_package(Zephyr):查找并加载 Zephyr 构建系统
-
project:定义项目名称为 “nRF Desktop”,版本为 0.1
-
assert:确保在 Kconfig 中定义了
CONFIG_DESKTOP_HID_REPORT_DESC
(HID 报告描述符文件路径) -
target_sources:添加主源文件
src/main.c
和 HID 描述符文件到构建 -
zephyr_library_include_directories:为应用库添加头文件路径(供内部模块使用)
-
zephyr_include_directories:为整个项目添加头文件路径(全局可见)
-
add_subdirectory:递归添加子目录中的代码模块,每个子目录需包含自己的 CMakeLists.txt
-
CONFIG_IMG_MANAGER:如果启用固件管理功能,链接 MCUboot 的引导工具库
-
CONFIG_DESKTOP_CONFIG_CHANNEL_ENABLE:如果启用配置通道功能,添加自定义链接脚本
nrf_desktop.ld
总结
上面的功能可能有点多,需要长期使用才知道大部分的功能,实际我们添加.c.h甚至.a&.lib文件只需要需要下面的指令就行了,添加在Cmakelists.txt
- 添加.c文件: target_sources:target_sources(app PRIVATE xxx.c )
- 添加.h文件路径:target_include_directories(app PRIVATE common)
- 添加.a或者.lib文件:target_link_libraries(app PRIVATE xxx.lib)
测试
使用periphreal_uart例程
1、在src目录添加test文件夹,在test文件下创建CMakeList.txt文件,将这个文件下面的test.c和test.h包含进去
2、在periphreal_uart例程根目录下把test这个文件夹使用add_subdirectory(src/test)包含进去,这样就可以了