You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在devicetree overlay中添加常量并在代码中读取对应值?

设备树Overlay定义常量的正确方案

问题根因

你之前的配置没有为自定义节点添加compatible属性,Zephyr构建系统只会为匹配到官方/自定义绑定的节点生成devicetree相关的头文件宏定义,无绑定的节点属性不会同步到devicetree_unfixed.h等生成文件中。

正确的Overlay配置

Zephyr官方预留了zephyr,user通用兼容属性,专门用于用户自定义常量场景,无需额外编写绑定即可自动生成宏,修改后的overlay配置如下:

/ {
    gpio_pin_names {
        compatible = "zephyr,user";
        led-blue = <9>;
        /* 可以继续添加其他自定义常量属性 */
    };
};

配置生效后,zephyr.dts中会保留原有的属性值,同时自动生成对应的头文件宏。

代码中读取数值的方法

  1. 首先引入devicetree头文件:
#include <zephyr/devicetree.h>
  1. 通过DT宏读取属性值:
    设备树中属性名的中划线-会自动转换为宏中的下划线_,因此led-blue属性在代码中用led_blue指代:
// 读取led-blue的数值
#define LED_BLUE_PIN DT_PROP(DT_PATH(gpio_pin_names), led_blue)

// 可选:添加编译校验,确保属性存在
BUILD_ASSERT(DT_NODE_HAS_PROP(DT_PATH(gpio_pin_names), led_blue),
             "Device tree missing led-blue property in gpio_pin_names node");

后续代码中直接使用LED_BLUE_PIN即可拿到对应的值9。

内容的提问来源于stack exchange,提问作者SePröbläm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:36:03