目录
[1. Zephyr介绍](#1. Zephyr介绍)
[2. Zephyr 安装及环境搭建](#2. Zephyr 安装及环境搭建)
[3. Zephyr 构建点亮LED指示灯实例](#3. Zephyr 构建点亮LED指示灯实例)
[4. Zephyr应用-具体行动建议](#4. Zephyr应用-具体行动建议)
1. Zephyr介绍
1.1 Zephyr 介绍
Zephyr 是由 Linux 基金会主导开发的开源实时操作系统(RTOS),专为资源受限的嵌入式设备量身打造,凭借轻量化、高可移植性和模块化的特性,成为物联网嵌入式领域的主流选择。
其核心价值与设计逻辑高度统一,核心特点可总结为以下几点:
-
跨平台适配能力突出: 支持 ARM Cortex-M/A、RISC-V、x86 等主流处理器架构,可适配 STM32、nRF、ESP32、TI 等多款主流 MCU。这一能力的核心是设备树(Device Tree)驱动的硬件抽象------ 区别于 FreeRTOS 直接调用 HAL 库的方式,Zephyr 通过 .dts 文件描述硬件信息,编译时自动生成对应头文件供驱动和应用调用,实现硬件配置与软件代码彻底解耦,达成 "一次开发,多板适配" 的目标 。
-
模块化设计与统一构建工具链: 采用组件化裁剪设计,可按需取舍功能,兼顾功能丰富性与资源轻量化;同时以 West 作为元工具,整合 CMake 构建框架和类 Linux 内核的 Kconfig 配置系统(支持 menuconfig 图形化配置),实现源码管理、编译、烧录、调试的一站式管理,模块化配置灵活度极高。
-
标准化的设备驱动模型: 提供统一的设备驱动接口,应用程序只需通过 device_get_binding() 等标准 API 获取设备操作能力,无需直接操作寄存器或厂商 HAL 库,大幅提升代码通用性和可维护性。
-
物联网协议栈开箱即用: 内置 BLE、Zigbee、MQTT、LwIP、CoAP 等主流物联网协议栈,无需开发者单独集成,降低物联网嵌入式设备的开发门槛。
-
安全特性完善: 内置安全启动、数据加密、PSA 认证等能力,可满足工业级和消费级嵌入式设备的安全需求。
简言之,Zephyr 以 "硬件抽象解耦 + 统一驱动模型 + 模块化构建" 为核心设计理念,兼顾跨平台适配、协议栈丰富性和安全性,是面向资源受限场景的高性能嵌入式 RTOS。
1.2 Zephyr 与 FreeRTOS 的核心差异
| 特性 | FreeRTOS | Zephyr | |
|---|---|---|---|
| 架构定位 | 微内核 RTOS。严格聚焦于实时调度核心(任务、通信、同步、内存), 其他功能(如网络、文件系统)依赖第三方库或自行实现 | 模块化宏内核 RTOS。定位为全功能嵌入式操作系统, 集成了内核、丰富的组件栈、硬件抽象层和开发框架于一个紧密集成的生态中 | |
| 核心功能 | 仅提供基础 RTOS 内核服务:- 任务/协程 - 队列、信号量、互斥量、事件组 - 软件定时器 - 内存管理(heap_1~5) | 内核 + 丰富内置组件:- 基础内核 - 完整设备驱动模型(1000+驱动) - 网络栈: L2/L3/L4, IPv6/4, BLE, 802.15.4, CoAP, MQTT - 文件系统: FAT, LittleFS, NVS - 高级框架: USB 设备/主机栈, 显示/GUI, 电源管理, 传感器框架 - 安全: PSA 认证, TFM 集成, 安全启动 - 更新: MCUboot(OTA) | |
| 硬件与设备支持 | 需开发者适配底层驱动(如 GPIO、UART) | 统一设备模型与驱动框架。通过Devicetree (DT) 描述硬件, 内核内置上千个高质量、经过测试的驱动程序, 支持 ARM Cortex-M/R/A, RISC-V, Xtensa 等开发板 | |
| 构建与配置系统 | 无统一构建工具,依赖 IDE / 手写 Makefile | 基于 CMake + West (元工具) 的现代统一构建系统。 - Kconfig: 提供图形化/命令行菜单配置, 系统性裁剪整个 OS。 - West: 统一管理多仓库代码、项目配置、编译、烧录、调试。 - Devicetree: 自动生成硬件配置头文件 | |
| 内存占用 | 极致精简。内核ROM可小至 ~5-10KB, RAM仅需数百字节(取决于任务数)。是资源极度受限(< 32KB Flash/RAM)场景的经典选择 | 可深度裁剪。最小配置(无驱动、无网络)可接近 FreeRTOS(~10KB+)。一旦启用核心组件(如驱动模型、IPC), 内存占用会显著增加(~20-50KB RAM 起) | |
| 开发门槛 | 入门简单。概念少, API 直观, 适合快速上手和理解 RTOS 原理。"自己动手"程度高, 适合对硬件和底层有掌控感的开发者 | 学习曲线陡峭。必须掌握 Kconfig, Devicetree, CMake, West 这一套工具链。抽象层次高, 初期调试可能复杂。但上手后生产力高, 尤其适合复杂产品 | |
| 适用场景 | 经典、确定性的实时控制。 - 工业电机控制 - 小型传感器节点 - 对内存和时序有极端要求的场景 - 作为其他大型OS的底层RTOS | 功能复杂的互联智能设备。 - IoT 边缘节点(需 BLE, Thread, Wi-Fi) - 可穿戴设备 - 智能家居/工业网关 - 需要强大电源管理、安全启动、OTA 的产品 |
2. Zephyr 安装及环境搭建
Zephyr 官方对 Linux(Ubuntu 20.04/22.04)兼容性最佳,Windows 推荐优先使用 WSL2(Windows Subsystem for Linux 2)部署 Ubuntu 环境(完全复用 Linux 流程),也支持原生 Windows 安装。
2.1 Linux系统下环境搭建
2.1.1 系统依赖安装
打开终端,依次执行以下命令安装基础依赖(建议使用 sudo 权限)
bash
# 1. 更新软件源并升级系统
sudo apt update && sudo apt upgrade -y
# 2. 安装核心依赖(git、cmake、编译工具、Python等)
sudo apt install -y git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
2.1.2 安装 West 工具(Zephyr 核心管理工具)
West 是 Zephyr 的命令行工具,用于源码管理、构建、烧录。安装步骤如下:
bash
# 1. 安装West(通过pip3,--user避免全局权限问题)
pip3 install --user west
# 2. 将West加入系统PATH(永久生效,适配bash终端)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 3. 验证West安装(输出版本号即成功)
west --version
# 预期输出:West version: v1.x.x(如v1.0.0、v1.1.0)
2.1.3 获取 Zephyr 源码
bash
# 1. 创建Zephyr工作目录并进入
mkdir -p ~/zephyrproject && cd ~/zephyrproject
# 2. 初始化West(指定稳定版,推荐v3.5.0;国内替换为Gitee镜像加速)
# 国内Gitee镜像(推荐):
west init -m https://gitee.com/zephyrproject-rtos/zephyr --mr v3.5.0 .
# 官方源(海外):
# west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.5.0 .
# 3. 下载所有依赖模块(约1-2GB,国内建议开代理/镜像)
west update
# 4. 导出Zephyr编译配置
west zephyr-export
# 5. 安装Python依赖
pip3 install --user -r zephyr/scripts/requirements.txt
2.1.4 安装交叉编译工具链
bash
# 1. 下载工具链(以v0.16.1为例,兼容v3.5.0)
cd ~/zephyrproject
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
# 验证文件完整性(可选)
wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
# 2. 解压并安装工具链
tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.1
sudo ./setup.sh
# 3. 安装udev规则(识别开发板,如ST-Link/J-Link)
sudo cp ~/zephyrproject/zephyr/boards/common/usb/*.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
2.1.5 环境验证
bash
# 1. 检查CMake版本(需≥3.20)
cmake --version
# 2. 检查交叉编译器(以ARM为例)
arm-zephyr-eabi-gcc --version
# 3. 列出支持的板卡(验证源码加载正常)
west boards | grep stm32f4 # 输出stm32f4_disco等即正常
2.2 Windows 下环境搭建
2.2.1 安装基础工具
使用 winget 一键安装。打开 PowerShell(管理员模式),执行以下命令:
bash
#
winget install Kitware.CMake Ninja-build.Ninja oss-winget.gperf Python.Python.3.12 Git.Git oss-winget.dtc wget 7zip.7zip
# 安装完成后,验证环境变量是否生效(避免后续编译时找不到工具)
cmake --version # 应显示 3.20+
ninja --version # 应显示 1.10+
python --version # 应显示 3.12.x(若显示 3.10 以下,需手动添加 Python 路径到环境变量)
git --version # 应显示 2.30+
若 winget 一键安装失败或 winget 不可用,就采用手动安装的方式:
手动安装的工具,要勾选 "添加到系统 PATH".
- CMake 官网下载链接
- Ninja 官网下载链接 (下载 ninja-win.zip,解压到指定路径,并添加到 PATH)
- Python 官网下载链接 (安装 3.8及以上的版本)
- Git 官网下载链接
- Gperf 官网下载链接 (下载后解压到指定路径,将 bin 目录添加到 PATH)
- DTC 官网下载链接 (下载 dtc-win64.zip,解压后添加到 PATH)
- 7-Zip 官网下载链接
2.2.2 创建并激活 Python 虚拟环境
bash
安装注意事项:
. 安装路径建议选择 D:\Miniconda,避免路径中出现空格;
. 务必勾选:✔ Add Miniconda to PATH,这样可以在命令行中直接使用 Conda 命令;
. 勾选:✔ Register as system Python,方便系统识别 Python 环境;
bash
# 创建 zephyr 开发环境
# 1. 打开 PowerShell ,执行以下命令:
# 1.1 切换到 D 盘
D:
# 1.2 创建工作目录
mkdir D:\work
# 1.3 基于 venv 创建虚拟环境 env_zephyr
# python -m venv D:\work\env_zephyr
conda create --prefix D:\work\env_zephyr python=3.11 -y # 可指定 python 版本
# 2. 激活虚拟环境
# 2.1 配置 PowerShell 执行策略, 首次激活执行一次,解决虚拟环境激活权限问题.
# 提示"是否允许执行"时,输入 Y 确认
set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 2.2 执行激活命令
# D:\work\env_zephyr\Scripts\Activate.ps1
conda activate D:\work\env_zephyr
# 激活成功后,命令行前缀会显示 (env_zephyr),如: (env_zephyr) PS D:\>
# 若要退出虚拟环境,执行如下命令
deactivate
2.2.3 安装 West 工具
激活 env_zephyr 环境后,执行如下命令:
bash
# 1. 升级 pip (确保 pip 是 3.12 版本),避免安装失败
pip install --upgrade pip
# 2. 安装 west
pip install west
# pip install -i https://mirrors.aliyun.com/pypi/simple/ west==1.2.0 # 安装指定版本的 west
# 3. 验证
west --version
2.2.4 获取 Zephyr 源码
激活 env_zephyr 环境后,执行如下命令:
bash
# 切换目录到 D:\work
cd D:\work
# 1. 初始化创建工作区 zephyrproject
# 命令执行后,会在 D:\work 目录下创建一个工作区目录 zephyrproject
# python -m west init D:\work\zephyrproject -m https://gitee.com/zephyrproject-rtos/zephyr # 拉取最新版本, 国内镜像太久未更新,不可用
# west init D:\work\zephyrproject -m https://gitee.com/zephyrproject-rtos/zephyr --mr v3.5.0 # 拉取指定版本
python -m west init D:\work\zephyrproject -m https://github.com/zephyrproject-rtos/zephyr # 官方 GitHub 仓库 初始化
# 2. 进入目录
cd zephyrproject
# 3. 更新同步代码,下载依赖模块 (国内镜像暂不可用,跳过 3.1 、3.2 、3.3 步)
# 3.1 国内连接 github.com 会超时失败; 把 west.yml 中所有子仓库的 github.com 替换为 gitee.com(Zephyr 官方 Gitee 镜像)
# Copy-Item zephyr/west.yml zephyr/west.yml.bak -Force # 备份原 west.yml
# 3.2 批量替换所有 GitHub 地址为 Gitee 镜像
# (Get-Content zephyr/west.yml) -replace 'https://github.com/zephyrproject-rtos', 'https://gitee.com/zephyrproject-rtos' | Set-Content zephyr/west.yml -Encoding UTF8
# 3.3 查看替换后的文件,确认地址已改为 Gitee
# Select-String -Path zephyr/west.yml -Pattern 'gitee.com'
# 预期输出: zephyr\west.yml:23: url-base: https://gitee.com/zephyrproject-rtos
# 3.4 更新
west update
# west update zephyr hal_nordic mcuboot segger mcumgr tinycbor # 指定更新依赖
# 4. 导出 Zephyr 编译配置(让 CMake 能找到 Zephyr 头文件/库)
west zephyr-export
# 5. 安装 Zephyr 所需的 Python 依赖(自动读取 west.yml 中的配置)
pip install -r zephyr\scripts\requirements.txt
2.2.5 安装交叉编译工具链
Zephyr SDK 包含交叉编译器(支持 Arm/Cortex-M 等架构)、调试工具、仿真器,必须安装.
zephyr-sdk-0.17.4_windows-x86_64.7z 下载
激活 env_zephyr 环境后,执行如下命令:
bash
# 1. 切换目录,并创建目录 zephyr-sdk
cd D:\work
mkdir zephyr-sdk;cd .\zephyr-sdk\
# 2. 将下载好的 zephyr-sdk-0.17.4_windows-x86_64.7z 移动到 D:\work\zephyr-sdk
# 3. 提取 Zephyr SDK 捆绑包归档
# 若找不到7z, 手动安装;7z安装到D:\work\7z , 临时手动添加 7z 到 Path
[7-Zip 官网下载链接](https://www.7-zip.org/)
$env:Path += ";D:\work\7z\7-Zip"
7z x zephyr-sdk-0.17.4_windows-x86_64.7z
# 4. 运行Zephyr SDK捆绑包的设置脚本
cd zephyr-sdk-0.17.4
.\setup.cmd
# 5. 设置用户环境变量
$env:ZEPHYR_SDK_INSTALL_DIR = "D:/workTest/zephyr-sdk/zephyr-sdk-0.17.4" # 临时使用指定版本的编译器
$env:Path = "$env:ZEPHYR_SDK_INSTALL_DIR\arm-zephyr-eabi\bin;" + $env:Path
#$env:Path = "$env:ZEPHYR_SDK_INSTALL_DIR\riscv64-zephyr-elf\bin;" + $env:Path
# 6. 验证
arm-zephyr-eabi-gcc --version
# riscv64-zephyr-elf-gcc --version
2.2.6 环境验证
conda activate D:\work\env_zephyr 激活环境后,执行如下命令:
bash
# 检查CMake
cmake --version
# 检查交叉编译器(ARM)
arm-zephyr-eabi-gcc --version
# 列出支持的板卡
cd D:\work\zephyrproject
west boards | findstr stm32f4
3. Zephyr 构建实例
以 STM32F4 Discovery(STM32F407)开发板为例,实现 UART通信(FreeRTOS 开发者最易上手的入门案例),对比 FreeRTOS 的操作方式,理解 Zephyr 的设备模型和 API。
使用 vscode 开发,创建工作区,并在 .vscode/settings.json 文件 添加激活环境配置 .
3.1 创建工程
Zephyr 提供west init创建工程,也可基于官方示例修改(推荐新手用示例):
bash
# 进入zephyrproject目录
cd ~/zephyrproject
# 复制官方UART示例到自定义工程目录
cp -r zephyr/samples/boards/st/uart/single_wire ~/zephyrproject/myProject
cd ~/zephyrproject/myProject/single_wire
3.2 配置设备树(硬件抽象)
Zephyr 通过设备树(.dts)描述硬件,无需直接操作寄存器。修改工程配置,指定目标板卡并定义 UART 引脚
3.2.1 新建 stm32f4_disco.overlay(设备树覆盖文件,用于自定义硬件)
新建的 stm32f4_disco.overlay 放在 prj.conf 同目录或 boards/ 目录下(为了提高操作的成功率,将boards目录下的其他 .overlay 删除)
dts
/* stm32f4_disco.overlay 文件 */
/*
* Device Tree Overlay for STM32F4 Discovery UART
*/
/ {
aliases {
single-line-uart1 = &usart1;
single-line-uart2 = &usart2;
};
};
/* 配置USART1 - 使用正常引脚 */
&usart1 {
status = "okay";
current-speed = <115200>;
/* 使用完整的TX/RX引脚 */
pinctrl-0 = <&usart1_tx_pa9 &usart1_rx_pa10>;
pinctrl-names = "default";
};
/* 配置USART2 - 使用正常引脚 */
&usart2 {
status = "okay";
current-speed = <115200>;
/* 使用完整的TX/RX引脚 */
pinctrl-0 = <&usart2_tx_pa2 &usart2_rx_pa3>;
pinctrl-names = "default";
};
3.2.2 修改prj.conf(工程配置文件),启用 GPIO 驱动
conf
# 核心:启用串口驱动
CONFIG_SERIAL=y
# STM32 UART驱动
CONFIG_UART_STM32=y
CONFIG_UART_INTERRUPT_DRIVEN=y
# 调试输出
CONFIG_PRINTK=y
CONFIG_STDOUT_CONSOLE=y
# 控制台配置(如果需要)
# CONFIG_CONSOLE=y
# CONFIG_UART_CONSOLE=y
# 注意:先不要启用控制台,避免冲突
# 链接器配置(尝试禁用某些特性)
CONFIG_PICOLIBC=y
CONFIG_MINIMAL_LIBC=n
CONFIG_NEWLIB_LIBC=n
# 禁用LTO(链接时优化)可能有助于解决链接问题
CONFIG_LTO=n
3.2.3 编写 UART 测试代码
C
// 修改src/main.c,替换原有代码
/*
* Single-wire UART test for STM32F4 Discovery
* Loopback test between USART1 and USART2
*/
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/uart.h>
#include <zephyr/sys/printk.h>
/* 直接使用节点标签 */
#define UART1_NODE DT_NODELABEL(usart1)
#define UART2_NODE DT_NODELABEL(usart2)
/* 获取设备指针 */
const struct device *uart1 = DEVICE_DT_GET(UART1_NODE);
const struct device *uart2 = DEVICE_DT_GET(UART2_NODE);
int main(void)
{
unsigned char recv;
int ret;
printk("Single-wire UART Loopback Test on STM32F4 Discovery\n");
/* 检查设备是否就绪 */
if (!device_is_ready(uart1)) {
printk("Error: UART1 device is not ready\n");
return 0;
}
if (!device_is_ready(uart2)) {
printk("Error: UART2 device is not ready\n");
return 0;
}
printk("UART1 and UART2 are ready for single-wire communication\n");
printk("Make sure to connect PA9 (USART1_TX) and PA2 (USART2_TX) together\n");
/* 主循环 */
while (true) {
/* 从UART1发送字符 */
uart_poll_out(uart1, 'c');
printk("Sent 'c' via USART1 (PA9)\n");
/* 等待传输完成 */
k_sleep(K_MSEC(50));
/* 从UART2接收 */
ret = uart_poll_in(uart2, &recv);
if (ret < 0) {
printk("Receiving failed. Error: %d\n", ret);
} else {
printk("Received '%c' via USART2 (PA2)\n", recv);
}
/* 等待2秒后再次测试 */
k_sleep(K_MSEC(2000));
}
return 0;
}
3.2.4 CMakeLists.txt 更改
若 build 构建出错,可调整 CMakeLists.txt 配置。
bash
# SPDX-License-Identifier: Apache-2.0
cmake_minimum_required(VERSION 3.20.0)
# 指定工具链文件(添加这行)
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/toolchain.cmake")
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
# 项目名称(与单总线 UART 业务匹配)
project(uart_stm32_single_wire)
# 显式声明 C 标准(匹配 Zephyr 4.x 默认配置,避免编译警告)
target_compile_features(app PRIVATE c_std_11)
# 添加应用源码(你的业务代码)
target_sources(app PRIVATE
src/main.c
)
# 【关键修复】添加链接器选项,使用 -lgcc 而不是 -lgcc.a
target_link_options(app PRIVATE
-lgcc # 修复:使用 -lgcc 而不是 -lgcc.a
)
# 添加链接器搜索路径
target_link_directories(app PRIVATE
"D:/work/zephyr-sdk/zephyr-sdk-0.17.4/arm-zephyr-eabi/lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v7e-m/nofp"
)
# 【可选】调试信息:显示链接器路径
message(STATUS "Linker search path: D:/work/zephyr-sdk/zephyr-sdk-0.17.4/arm-zephyr-eabi/lib/gcc/arm-zephyr-eabi/12.2.0/thumb/v7e-m/nofp")
3.3 构建工程
通过 west 编译工程,指定目标板卡
bash
# 进入工程目录
cd ~/zephyrproject/myProject/single_wire
# 清除 build
Remove-Item -Recurse -Force build -ErrorAction SilentlyContinue # 直接删除整个 build 目录
# 构建工程(-b指定板卡为stm32f4_disco)
west build -b stm32f4_disco .
# 编译成功后,生成的固件在build/zephyr/zephyr.elf(可烧录文件为zephyr.bin)
3.4 烧录与验证
通过 west 编译工程,指定目标板卡
bash
# 1. J-Link 连接 STM32F4 Discovery 开发板
# 2. 执行烧录命令, west烧录(自动识别烧录器,支持J-Link/ST-Link):
west flash
3.5 关键差异说明(对比 FreeRTOS)
- FreeRTOS 需手动调用 HAL 库配置 GPIO 寄存器,Zephyr 通过设备树抽象硬件,代码与硬件解耦;
- FreeRTOS 的延时依赖vTaskDelay(基于系统节拍),Zephyr 的k_msleep是内核统一延时 API,支持毫秒 / 微秒级;
- Zephyr 的device_is_ready确保硬件驱动初始化完成,FreeRTOS 需手动保证驱动初始化顺序;
4. Zephyr应用-具体行动建议
从 FreeRTOS 转向 Zephyr,建议分阶段学习,兼顾 "快速上手" 和 "深度掌握",以下是落地性强的行动方案:
4.1 入门阶段:聚焦核心基础
1.环境固化: 基于 Ubuntu/Windows 搭建稳定环境,保存依赖安装脚本(避免重复踩坑);
2.案例实操:
- 基于官方案例先显示 LED 案例,再实现 UART 串口打印、定时器中断等;
- 重点理解west build/flash/debug命令、设备树覆盖文件(.overlay)、prj.conf配置;
3.API 对比学习: 整理 FreeRTOS 与 Zephyr 核心 API 映射表(如下),降低记忆成本;
| FreeRTOS API | Zephyr RTOS 等效 API | 用途说明 |
|---|---|---|
| vTaskCreate | k_thread_create | 创建任务/线程 |
| vTaskDelay | k_msleep / k_usleep / k_sleep | 任务延时 |
| xQueueSend / xQueueReceive | k_msgq_put / k_msgq_get | 消息队列操作 |
| xSemaphoreTake / Give | k_sem_take / k_sem_give | 信号量操作 |
| xTimerCreate | k_timer_init + k_timer_start | 定时器创建与启动 |
| xTaskGetCurrentTaskHandle | k_current_get | 获取当前任务句柄 |
| vTaskSuspend / Resume | k_thread_suspend / k_thread_resume | 挂起与恢复任务 |
| xQueueCreate | k_msgq_alloc_init | 动态创建消息队列 |
| xTaskGetTickCount | k_uptime_get_32 / k_cycle_get_32 | 获取系统时间或 tick |
4.2 进阶阶段: 掌握核心组件
1.设备树深入学习:
- 阅读 Zephyr 官方设备树文档,理解dt-bindings、节点别名、属性配置;
- 自定义板卡的设备树文件,适配自己的 MCU 开发板;
2.组件配置实战:
- 通过menuconfig(west build -t menuconfig)配置组件(如启用 BLE、关闭无用模块);
- 实现 "BLE 广播 + LED 控制" 案例(Zephyr 内置 BLE 协议栈,无需单独集成 Nordic SoftDevice);
3.调试能力建设:
- 学习west debug(基于 GDB)调试 Zephyr 工程,查看任务栈、内核状态;
- 使用 Zephyr 的sysview工具分析任务调度(替代 FreeRTOS 的 Tracealyzer);