当前位置: 首页 > news >正文

用 vs code 修改NCS sdk 工程配置

nRF Connect SDK(NCS):v3.0.1
toolchains:v3.0.1
这里做一些简单快速上手的记录,详细内容请看大佬:https://www.cnblogs.com/iini/p/14174427.html

1. 添加头文件和源文件--------CMakeLists.txt文件
老版nRF5 SDK 使用keil 5 配置头文件和源文件
捕获
捕获

新版NCS 用的是CMakeLists.txt文件
捕获

子目录工程\ncs\v3.0.1\nrf\applications\nrf_desktop\src\events路径下的CMakeLists.txt文件
捕获

2. 选择Board(板子)进行编译--------查看sample.yaml文件
keil 5 直接选择板子
捕获

新版NCS 编译的时候选择板子
捕获
至于工程支持什么板子,我们可以在例子下找到sample.yaml文件说明
捕获
Nordic定义的所有板子放在目录:zephyr\boards\nordic,以及nrf\boards\nordic

3. 修改image的ROM起始地址和大小,以及运行时所占RAM的起始地址和大小-----DeviceTree文件
keil 5在 Target选项中配置
捕获

新版NCS 在DeviceTree文件中修改,路径:C:\ncs\v3.0.1\zephyr\dts\common\nordic\xxx.dtsi
捕获

4. 开启/关闭/定义/赋值 宏定义--------autoconf.hdevicetree_generated.h
autoconf.h和devicetree_generated.h是编译系统(主要是Python脚本)编译生成的,用户不能直接修改,
只能通过这两个文件的输入文件去间接修改这两个文件。

  • autoconf.h:
    由多个Kconfig文件和多个以.conf(比如prj.conf)为后缀的文件生成
    Kconfig是声明宏定义的地方,
    捕获

我们可以通过在Applications窗口选择“peripheral_uart”工程,然后点击actions窗口的“nRF Kconfig GUI”条目,
然后点击上面红圈的“Toggle Panel”按钮,查看各个模块里有什么宏定义
捕获

而prj.conf等其他conf文件是引用宏或者给宏赋值的地方,我们在此处修改
捕获
修改完数据后“nRF Kconfig GUI”条目可能会使用不了,这个时候重新build一下就能重新使用

  • devicetree_generated.h:
    由多个dts/dtsi和overlay文件编译成,这些文件最终会合并成
    一个zephyr.dts文件{ C:\ncs\v3.0.1\nrf\samples\bluetooth\peripheral_uart\ “build\peripheral_uart\zephyr”},
    zephyr.dts文件又会转成devicetree_generated.h文件{ C:\ncs\v3.0.1\nrf\samples\bluetooth\peripheral_uart\build\peripheral_uart\zephyr\include\generated\zephyr},
    最终通过define(宏定义)的方式在代码中发挥作用

我们可以看到peripheral_uart工程在“Devicetree”条目看到.dts文件,以及里面包含了很多dts/dtsi和overlay文件,
捕获

dts/dtsi文件负责定义宏,overlay文件负责修改宏的值。但是app.overlay(或者.overlay)是一张空白纸,
用户对Devicetree语法又不熟,以至于很多用户无从下手。
其实,用户可以通过在Applications窗口选择“peripheral_uart”工程,然后点击actions窗口的“Devicetree overlay file”条目修改
捕获
捕获

overlay文件另一个功能是:同一个工程兼容不同板子外设
nRF54L15使用uart30,nRF52840有可能使用uart1,两个uart编号是不一样的,但是我们又想用同一个程序去兼容不同uart编号,为此我们定义uart别名
捕获
这样在代码中我们可以引用myuart,而不同的板子可以对应不同的overlay文件,不同的overlay文件可以选择不同的uart编号,从而实现一个程序代码兼容不同uart外设。
uart设备句柄可以通过如下API获得:
const struct device *uart = DEVICE_DT_GET(DT_ALIAS(myuart));

既然Kconfig和DeviceTree都可以配置NCS工程,那我要定义一个宏的时候是放在Kconfig里面还是DeviceTree里面?Kconfig主要负责软件的配置,DeviceTree主要负责板子硬件的配置。Devicetree有严格的语法要求,它能定义的宏是预先规定好的并且非常有限,一般来说,我们直接引用现有Devicetree配置文件里面的宏定义,而不额外添加新的宏定义。换句话说,新的宏定义我们一般都放在Kconfig文件里面。

除了prj.conf文件外,board.conf文件也是Zephyr标准conf文件,Zephyr编译系统可以自动找到他们,并和prj.conf里面的配置一起合并,
需要注意的是,board.conf优先级高于prj.conf
当一个宏同时在prj.conf 和 board.conf里面赋值,以 board.conf里面的赋值为最后结果
prj.conf是工程级的配置,所以它的配置适用工程下的板子,board.conf是板级的配置,它只适用当下的板子。
请记住,按照Zephyr标准命名方式要求,目录名必须是“boards”,里面的.conf文件必须以板子名字来命名,否则系统将忽略它们,如下
捕获

http://www.sczhlp.com/news/4442/

相关文章:

  • “二次元绘图神器!PaintTool SAI Ver.2 2024版本下载+安装教程来了”
  • JT-Math:大语言模型高级数学推理的多阶段框架
  • Firefox.com子域名劫持漏洞分析与修复
  • 2025自动驾驶智驾平权与Robotaxi商业化报告|附70+份报告PDF及数据表汇总下载
  • GitOps:云原生时代的革命性基础设施管理范式
  • spring和Mybatis的各种查询
  • 【自学嵌入式:51单片机】单总线
  • Spring与MyBatis中的连接池与缓存机制
  • 基于Ubuntu 24.04原内核6.8.0升级到6.9.0
  • 洛谷P12504 「ROI 2025 Day1」树上的青蛙
  • Typora1.9.5最新版本下载安装激活,Markdown小白到高手:Typora全攻略
  • 初窥Minio文件存储系统
  • 如何播放m3u8文件(总结在线方式播放hls文件的几种方式)
  • awk基础
  • 【自学嵌入式:51单片机】DS18B20温度传感器
  • VBScript 脚本学习
  • IK 字段级别词典升级:IK reload API
  • Go语言字符串拼接性能对比与最佳实践 - 深度优化指南
  • 洛谷P8281 「MCOI-08」Fast Enumeration
  • 万字带你深度了解MQ消息队列
  • WGCLOUD的主机列表如何隐藏列
  • 灵智通以AI引领AOI创新,赋能电子厂产业升级
  • 基于Java+Springboot+Vue开发的家具销售系统源码+运行步骤
  • python:前馈人工神经网络算法之实战篇,以示例带学,弄明白神经网络算法应用的思路、技巧与注意事项等
  • 强化学习01 贝尔曼方程蒙特卡罗学习
  • Redis教程-持久化(AOF) - 智慧园区
  • 第二十三日
  • linux开机黑屏的一种解决方案
  • NSF与某机构公布AI公平性资助项目
  • 2025 高考数学题解