Zephyr RTOS在XIAO ESP32S3(sense)上的实践:驱动适配与开发范式探索
1. 从一块“全能”开发板说起为什么是XIAO ESP32S3(sense)如果你最近在逛开源硬件社区大概率会看到一块叫“XIAO ESP32S3(sense)”的小板子。它尺寸极小大概只有拇指指甲盖那么大但上面集成的功能却多得有点“不讲道理”一颗ESP32-S3双核处理器、8MB PSRAM、16MB Flash、一个200万像素的摄像头、一个数字麦克风甚至还预留了SD卡槽。这配置简直就是为物联网边缘端的图像、音频处理任务量身定做的。但拿到这样一块硬件“小钢炮”后很多开发者包括我自己都会面临一个选择用什么软件平台来驱动它官方的ESP-IDF基于FreeRTOS当然是第一选择生态完善文档齐全。然而当你的项目需求开始变得复杂比如需要同时管理摄像头采集、音频处理、无线通信并且对系统的实时性、功耗和代码的模块化有更高要求时你可能会开始思考有没有更“现代”、更“统一”的解决方案这就是Zephyr RTOS进入视野的时候。Zephyr不是一个新概念但近年来它的发展势头非常猛。它是一个由Linux基金会托管的、专为资源受限设备设计的开源实时操作系统。它的核心优势在于“高度可配置”和“跨平台”。你可以把它想象成一个乐高积木箱里面包含了从内核、调度器、网络协议栈如Wi-Fi、蓝牙、文件系统到各种设备驱动包括摄像头、麦克风、各种传感器的所有模块。你需要什么就通过一个图形化或命令行工具Kconfig把它勾选上Zephyr会帮你生成一个高度定制化、没有冗余代码的系统。那么把XIAO ESP32S3(sense)这块功能强大的硬件与Zephyr这个高度模块化的软件平台结合起来会发生什么这不仅仅是“能不能跑起来”的问题而是探索一种新的开发范式用一套统一的、面向未来的RTOS框架去释放特定硬件在特定场景下的全部潜力。比如你想做一个低功耗的智能门铃需要周期性地唤醒、拍照、进行本地AI识别人脸检测、然后通过Wi-Fi上报。用Zephyr你可以精确地控制每个任务的优先级、电源状态并且复用其成熟的摄像头驱动和网络协议栈而不需要从零开始移植或适配。接下来我将结合自己的实践详细拆解如何在XIAO ESP32S3(sense)上搭建Zephyr开发环境深入分析其相较于传统ESP-IDF开发的优势与挑战并最终实现一个结合摄像头与麦克风的简单多媒体应用示例。你会发现这条路虽然初期有学习成本但长远来看对于复杂的、跨硬件的产品线规划价值巨大。2. 环境搭建跨越工具链与配置的第一道坎在ESP-IDF的世界里官方提供了一体化的安装工具几乎可以做到一键部署。但Zephyr的开发环境搭建更像是在组装一台精密的仪器你需要自己准备工具链、拉取源码、配置Python依赖和West工具。对于ESP32-S3这类非Zephyr官方首要支持的芯片首要支持通常是Nordic、ST等还需要一些额外的步骤。2.1 核心工具链准备ESP32与Zephyr的交汇点Zephyr编译ESP32-S3本质上是使用乐鑫官方的编译器xtensa-esp32s3-elf-gcc来编译Zephyr内核与应用代码。因此第一步是确保你的系统上有ESP-IDF的环境。这并不是说你要完整安装ESP-IDF而是需要其工具链。一个更干净的做法是直接使用乐鑫提供的独立工具链。你可以从乐鑫的GitHub Release页面下载xtensa-esp32s3-elf-gcc的压缩包解压并添加到系统PATH中。但更推荐的方式是通过Zephyr SDK来管理。最新版的Zephyr SDK已经集成了对ESP32系列包括S3的交叉编译工具链支持。安装Zephyr SDK时记得勾选对应的架构选项。注意Zephyr SDK和ESP-IDF的工具链可能会产生冲突。我的经验是优先使用Zephyr SDK内集成的工具链。如果遇到链接错误再检查环境变量PATH中是否混入了ESP-IDF的工具链路径确保Zephyr SDK的路径在前。2.2 获取Zephyr源码与配置WestZephyr使用一个名为West的元工具进行项目管理。它类似于Git的超级管理器可以一次性拉取主仓库Zephyr本体和所有在清单文件west.yml中定义的模块仓库如硬件抽象层HAL、驱动、第三方库等。# 安装west pip3 install west # 初始化一个工作目录并拉取Zephyr主仓库及所有模块 west init zephyrproject cd zephyrproject west update # 导出Zephyr环境变量 source zephyr/zephyr-env.sh执行west update是最需要耐心的一步它会从GitHub、GitLab等地址拉取几十个仓库。国内网络环境可能会遇到问题需要配置Git代理或使用国内镜像源。这是使用Zephyr的第一个常见“坑”务必确保所有模块都拉取成功否则后续编译会报找不到文件或版本错误。2.3 针对XIAO ESP32S3(sense)的板级配置Zephyr支持“板级”概念每个板子对应一个目录里面定义了该板子的所有硬件特性CPU型号、时钟配置、外设引脚映射、Flash分区表等。Seeed Studio的XIAO ESP32S3(sense)在Zephyr中可能没有现成的官方板级定义。这是我们遇到的第一个实质性挑战。通常有三种应对策略使用最接近的通用板型比如esp32s3_devkitm。这是乐鑫官方的ESP32-S3开发板。你可以先用它进行测试但摄像头和麦克风的引脚肯定对不上。移植现有板级定义找一个Zephyr已支持的ESP32-S3板子如esp32s3_devkitm复制其目录然后根据XIAO ESP32S3(sense)的原理图修改设备树.dts文件。这是最正规的方式但涉及设备树语法学习。在应用层覆盖引脚定义对于简单的外设测试可以在应用代码中直接通过Kconfig或代码宏覆盖默认的引脚配置。这种方式不够优雅但快速。为了快速验证我采用了策略1和3的结合。首先使用esp32s3_devkitm配置让系统跑起来然后重点解决摄像头和麦克风的驱动问题。3. 驱动适配让摄像头和麦克风“开口说话”XIAO ESP32S3(sense)的摄像头型号通常是OV2640或GC0308麦克风则是数字PDM麦克风。在Zephyr中这些设备都需要对应的驱动。3.1 摄像头驱动适配OV2640的DTS配置与KconfigZephyr的驱动模型非常清晰。一个设备首先在设备树boards/arm/esp32s3_devkitm/esp32s3_devkitm.dts中声明其硬件连接。对于摄像头我们需要定义一个I2C总线节点用于配置摄像头寄存器和一个CSI摄像头串行接口节点。由于esp32s3_devkitm.dts里没有摄像头定义我们需要在应用项目的目录下创建一个覆盖文件例如boards/esp32s3_devkitm.overlay。这个文件会在编译时合并到主设备树中。// boards/esp32s3_devkitm.overlay / { aliases { camera0 ov2640; }; }; i2c0 { status okay; clock-frequency 400000; ov2640: camera30 { compatible ovti,ov2640; reg 0x30; reset-gpios gpio0 15 GPIO_ACTIVE_LOW; // 假设RESET引脚接GPIO15 pwdn-gpios gpio0 16 GPIO_ACTIVE_HIGH; // 假设PWDN引脚接GPIO16 port { camera_ep: endpoint { remote-endpoint csi_ep; ># 启用I2C和CSI CONFIG_I2Cy CONFIG_VIDEOy CONFIG_VIDEO_OV2640y CONFIG_CSIy # 启用图像采集和缓冲 CONFIG_VIDEO_BUFFER_POOL_SZ_MAX4编译时Zephyr会根据.overlay和.conf文件生成最终的硬件配置并编译进对应的驱动。如果一切顺利在应用程序中就可以通过标准的视频设备接口如video_get_capabilities,video_dequeue等API来操作摄像头了。3.2 麦克风驱动适配PDM麦克风与音频子系统麦克风的适配相对简单。XIAO ESP32S3(sense)的麦克风通常通过I2S或PDM接口连接。Zephyr的音频子系统支持PDM麦克风。我们需要在设备树覆盖文件中声明一个PDM设备并指定其数据时钟引脚。// 继续在之前的overlay文件中添加 i2s0 { status okay; pinctrl-0 i2s0_default; pinctrl-names default; clocks i2s0_in; clock-names i2s_clk; dmas gdma 0 0 gdma 0 1; dma-names rx, tx; #address-cells 1; #size-cells 0; mic: mic0 { compatible audio-mic; reg 0; label PDM_MIC; status okay; }; };同时在prj.conf中启用音频和麦克风支持CONFIG_AUDIOy CONFIG_AUDIO_DMICy CONFIG_AUDIO_DMIC_NHLTy驱动适配是整个过程中最耗时、也最考验耐心的部分。你可能会遇到各种编译错误、链接错误或者设备树语法错误。关键是多查阅Zephyr的官方文档中关于设备树绑定Device Tree Bindings的部分以及已有类似驱动如ov7725摄像头驱动的源码作为参考。使用west build -t menuconfig命令可以图形化检查哪些配置被正确启用是一个非常实用的调试手段。4. 应用开发实战构建一个简单的音视频采集例程当驱动层就绪后应用层的开发反而变得直观。Zephyr提供了一套相对统一的API来操作不同外设。下面我们实现一个简单的应用每隔5秒拍摄一张照片并同时录制一段1秒的音频将数据通过串口输出在实际应用中可以改为通过Wi-Fi传输或存入SD卡。4.1 项目结构与主逻辑框架首先创建一个标准的Zephyr应用目录结构my_av_app/ ├── CMakeLists.txt ├── prj.conf ├── boards/ │ └── esp32s3_devkitm.overlay └── src/ └── main.cCMakeLists.txt内容很简单# SPDX-License-Identifier: Apache-2.0 cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(my_av_app) target_sources(app PRIVATE src/main.c)主程序main.c的框架如下#include zephyr/kernel.h #include zephyr/drivers/video.h #include zephyr/audio/dmic.h #include stdio.h // 定义摄像头和麦克风设备指针 const struct device *video_dev DEVICE_DT_GET(DT_NODELABEL(camera0)); const struct device *audio_dev DEVICE_DT_GET(DT_NODELABEL(mic)); void main(void) { // 1. 初始化设备检查 if (!device_is_ready(video_dev)) { printf(摄像头设备未就绪\n); return; } if (!device_is_ready(audio_dev)) { printf(麦克风设备未就绪\n); return; } // 2. 获取摄像头能力并设置格式例如QVGA RGB565 struct video_caps caps; video_get_caps(video_dev, VIDEO_EP_OUT, caps); // ... 选择并设置合适的格式 ... struct video_format fmt { .pixelformat VIDEO_PIX_FMT_RGB565, .width 320, .height 240, // ... 其他参数 }; video_set_format(video_dev, VIDEO_EP_OUT, fmt); // 3. 配置麦克风采样率、声道等 struct dmic_cfg cfg { .channels 1, .sampling_rate 16000, // ... 其他配置 }; dmic_configure(audio_dev, cfg); while (1) { printf(开始一次音视频采集...\n); // 4. 启动摄像头捕获抓取一帧 video_enqueue(video_dev, VIDEO_EP_OUT, my_video_buffer, ...); // 等待帧捕获完成... // 5. 启动麦克风录音持续1秒 dmic_trigger(audio_dev, DMIC_TRIGGER_START); k_sleep(K_SECONDS(1)); dmic_trigger(audio_dev, DMIC_TRIGGER_STOP); // 从DMA环形缓冲区读取音频数据... printf(采集完成。视频大小%d字节音频大小%d字节\n, video_size, audio_size); // 6. 休眠一段时间 k_sleep(K_SECONDS(5)); } }4.2 数据流管理与同步难点在这个简单的例程中隐藏着一个关键挑战音视频同步与数据流管理。摄像头捕获一帧图像是瞬间的而麦克风录音是持续1秒的流式数据。在更复杂的应用如视频录制中你需要为每一帧视频打上时间戳并与对应时间段的音频数据对齐。Zephyr的Video和Audio API目前更偏向于基础的采集与控制高级的同步、编码、封装如生成AVI或MP4需要开发者自己实现或者集成第三方库如libav。这暴露了Zephyr在多媒体应用栈上的一个现状底层驱动支持正在完善但上层的、开箱即用的高级应用框架还比较稀缺。这也是为什么很多复杂的多媒体项目目前仍首选ESP-IDF或Linux的原因。不过对于很多边缘AI应用如“采集一帧图片进行本地识别”这种简单的采集模式已经足够。你可以将采集到的RGB565图像数据转换为更易处理的格式如RGB888或灰度图然后送入一个轻量级的AI推理引擎例如TensorFlow Lite MicroZephyr也已提供支持实现端侧智能。5. 深度对比Zephyr RTOS vs. ESP-IDF究竟如何选经过上面的实践我们可以更具体地对比在XIAO ESP32S3(sense)上使用Zephyr和原生ESP-IDF的差异。这不是简单的优劣判断而是适用场景的选择。5.1 开发模式与哲学差异ESP-IDF可以看作是“乐鑫官方全家桶”。它围绕ESP32系列芯片深度优化提供了从硬件抽象层HAL、网络协议栈LwIP、安全库到各种云服务SDK的完整解决方案。它的开发体验是垂直的、一站式的。你想用摄像头就用esp32-camera组件想连Wi-Fi就用esp_wifiAPI。一切都很直接但你也深度绑定在了乐鑫的生态里。Zephyr更像是一个“高度模块化的操作系统构建工具包”。它强调可移植性和配置性。硬件抽象通过设备树DTS完成驱动与内核解耦。你想用摄像头需要先确认Zephyr的video子系统和对应的驱动如ov2640是否支持你的硬件然后在设备树中正确配置。这个过程更“底层”也更“通用”。一旦适配完成你的应用代码在理论上可以更容易地移植到另一个也支持Zephyr和OV2640的开发板上。5.2 实时性与功耗管理两者都是RTOS都提供了基于优先级的抢占式调度、信号量、消息队列等核心机制。在基础的实时性上差异不大。但在精细化的功耗管理方面Zephyr的设计理念更超前。Zephyr内置了一个强大的电源管理Power Management, PM框架。它允许你为每个设备定义不同的电源状态如活动、挂起、关闭并且系统可以根据设备使用情况和内核空闲时间自动进入低功耗模式如ESP32-S3的Light-sleep, Deep-sleep。你可以在设备驱动中实现pm_action_callback来定义设备在进入低功耗状态前如何保存上下文唤醒后如何恢复。这对于电池供电的物联网设备至关重要。ESP-IDF虽然也提供了深度睡眠等接口但其电源管理更多是芯片级的、整体性的控制缺乏Zephyr那种基于设备树的、细粒度的、策略驱动的管理能力。5.3 生态与社区支持这是目前Zephyr最大的短板也是ESP-IDF最坚固的护城河。硬件驱动ESP-IDF对乐鑫自家芯片和外设的支持是原生且最完善的。Zephyr虽然支持ESP32系列但一些较新的外设如ESP32-S3的USB OTG或特定型号传感器其驱动成熟度和稳定性可能不及ESP-IDF。摄像头和麦克风的适配过程就是最好的例子。云服务与中间件ESP-IDF无缝集成AWS IoT、Azure IoT、阿里云等各大平台的SDK。Zephyr虽然也支持LwIP、MQTT、CoAP等协议但与具体云平台的深度集成需要更多手动工作。调试与工具链ESP-IDF与乐鑫的JTAG调试工具、性能分析工具如idf.py monitor、heap tracing结合得天衣无缝。Zephyr使用标准的GDB调试通用但可能需要更多配置才能达到同样便利的程度。5.4 选型决策指南那么到底该怎么选我的建议基于你的项目阶段和长期目标选择ESP-IDF如果你项目时间紧需要快速原型验证。重度依赖乐鑫特有的硬件功能或云服务生态。项目功能相对标准不需要极致的功耗优化或跨平台移植。团队熟悉ESP-IDF学习新系统成本过高。选择Zephyr RTOS如果你项目是产品化导向且对功耗有严苛要求需要精细的电源管理。有跨平台需求未来可能更换MCU供应商如从ESP32切换到Nordic或ST希望保持应用层代码最大程度的复用。追求代码的长期可维护性和模块化欣赏清晰的设备树硬件描述和驱动模型。愿意投入前期学习成本并能够应对驱动适配可能带来的挑战。对于XIAO ESP32S3(sense)这样功能丰富的板子用Zephyr更像是一次“先锋探索”。你牺牲了部分开箱即用的便利换来的是对现代RTOS设计理念的深入理解以及构建一个更干净、更可移植的软件系统的潜力。对于学习、研究或为未来产品做技术储备这是一条非常有价值的路径。6. 进阶之路从驱动到应用框架的思考让摄像头和麦克风在Zephyr下工作起来只是第一步。要真正发挥XIAO ESP32S3(sense)的潜力我们还需要考虑更多。6.1 集成AI推理引擎TensorFlow Lite MicroZephyr官方已经支持TensorFlow Lite Micro作为一个模块。这意味着你可以通过west.yml清单文件将其添加到项目中并在prj.conf中启用CONFIG_TFLITE_MICROy。之后你就可以将训练好的TFLite模型例如用于图像分类的MobileNetV1量化模型转换为C数组集成到固件中。在应用代码中你可以将摄像头采集到的图像预处理缩放、归一化后直接送入TFLite Micro解释器进行推理。由于ESP32-S3带有向量指令和额外的PSRAM运行一些轻量级模型如人脸检测、关键词唤醒是可行的。Zephyr的任务调度可以确保AI推理这个计算密集型任务不会阻塞关键的实时任务如网络心跳包。6.2 构建自定义的电源管理策略基于Zephyr的PM框架我们可以设计一个复杂的电源状态机。例如系统大部分时间处于深度睡眠仅由RTC定时器或外部中断如PIR传感器唤醒。唤醒后系统进入活动状态启动摄像头进行抓拍。图片经本地AI推理如无异常则系统立即返回深度睡眠。如检测到异常则启动Wi-Fi连接将图片和推理结果上传至云端然后等待云端确认后再进入深度睡眠。这一切都可以通过配置Zephyr的PM策略和设备驱动中的电源管理回调函数来实现从而最大化电池寿命。6.3 挑战与未来展望当前的挑战也很明显驱动完整性并非XIAO板载的所有传感器如可能存在的IMU都有现成的Zephyr驱动需要自行移植或编写。性能优化Zephyr的驱动层为了通用性可能没有针对ESP32-S3的硬件加速器如JPEG编码、AI加速器做极致优化。这部分性能挖潜需要深入芯片手册和驱动源码。社区资源遇到问题时Zephyr相关的英文论坛和文档是主要资源中文社区的资料相对ESP-IDF要少很多。然而趋势是向好的。随着Zephyr被越来越多的半导体厂商包括乐鑫所支持和贡献其硬件支持库会越来越丰富。将XIAO ESP32S3(sense)与Zephyr结合正是参与并推动这一进程的具体实践。它不仅仅是一个技术选型更是一次对物联网设备软件开发“标准化”和“现代化”的尝试。当硬件越来越同质化软件系统的可移植性、可维护性和能效将成为产品差异化的关键。

相关新闻

Arduino LED矩阵驱动:ATmega328硬件SPI与中断扫描原理详解

Arduino LED矩阵驱动:ATmega328硬件SPI与中断扫描原理详解

1. 项目概述:当Arduino遇上LED矩阵如果你玩过Arduino,大概率接触过点亮一个LED灯的实验。但当你面对一整块8x8、16x16甚至更大规模的LED点阵屏,想要让它们显示复杂的动画、文字或图形时,直接用Arduino Uno去驱动,很快就…

2026/9/29 14:28:39 阅读更多 →
SkyWalking:全链路追踪的可视化利器

SkyWalking:全链路追踪的可视化利器

【725】SkyWalking:全链路追踪的可视化利器 想象你是外卖平台的运维,每天面对: 100+个微服务 每天几百万次请求 用户投诉:“下单慢” 你登录8台服务器查看日志,找了半天没找到问题。 这时候老板问:“找到原因了吗?” 你说:“还在看…” 这就是没有链路追踪的痛苦。…

2026/9/14 22:54:02 阅读更多 →
不跨平台、不丢数据:SOLIDWORKS Simulation 频率分析全解

不跨平台、不丢数据:SOLIDWORKS Simulation 频率分析全解

不跨平台、不丢数据:SOLIDWORKS Simulation 频率分析全解在SOLIDWORKS Simulation Professional仿真包中,包含一种叫做 频率 的分析类型,其又叫模态分析或固有频率分析,是获取结构振动模态的常用仿真类型。模态分析(Mo…

2026/9/29 6:48:13 阅读更多 →

最新新闻

电机驱动入门笔记02:六步驱动电路设计

电机驱动入门笔记02:六步驱动电路设计

一、案例 参考开源项目: https://oshwhub.com/tai-tou-dui/chuan-kou-lei-xing-wu-shua-dian-ji-dian-ji-qu-dong 1、6个MOS 6 个 IRF540NPBF(Q1~Q6)就是六步换相的 6 个开关,一相 2 个(上管+下管) 3 相 = 6 个,和三相桥完全对应。

2026/10/4 19:42:37 阅读更多 →
Playwright自定义选择器与定位器:从能跑到稳定跑的进阶之道

Playwright自定义选择器与定位器:从能跑到稳定跑的进阶之道

写自动化用例写到第三个月,最容易崩溃的往往不是语法,而是选择器。你前一天还跑得好好的用例,第二天前端同事把按钮文字从“立即登录”换成“登 录”,整个测试集就红掉一大片;再碰上那些每次发版都换一套 class 马甲的…

2026/10/4 19:42:37 阅读更多 →
Cursor插件系统深度解析:从配置失效到AI工作流重构

Cursor插件系统深度解析:从配置失效到AI工作流重构

1. 项目概述:从“plugins”这个词开始,我们到底在聊什么?“plugins”这个词最近在开发者圈子里频繁刷屏,但很多人点开搜索结果后反而更迷糊了——它既不是某个具体软件的专属名词,也不是某家公司的产品代号&#xff0c…

2026/10/4 19:42:37 阅读更多 →
GitHub日榜项目筛选与落地:从热词痛点到生产实践

GitHub日榜项目筛选与落地:从热词痛点到生产实践

1. GitHub 日榜项目的价值定位与选题逻辑1.1 为什么日榜比周榜、月榜更值得盯很多人刷 GitHub 热榜的习惯是看周榜或者月榜,觉得日榜波动太大、噪音太多。但我自己盯了很长一段时间的日榜之后,反而觉得日榜才是最有信息密度的那个。原因很简单&#xff1…

2026/10/4 19:42:37 阅读更多 →
插件机制深度解析:从加载失败排查到插件系统设计

插件机制深度解析:从加载失败排查到插件系统设计

1. 从一串报错说起:为什么今天的软件都离不开插件先说个真实的事。前阵子我搭建一个 Web 应用容器,启动日志里突然蹦出一行让我原地愣住的报错:harness failed to load plugins web boot: 1 entry did not activate后面还跟着一个插件包的名字…

2026/10/4 19:42:37 阅读更多 →
从 POC 到生产环境:AI Agent Harness 大规模并发部署的工程挑战与 TaoToken 统一接入实践

从 POC 到生产环境:AI Agent Harness 大规模并发部署的工程挑战与 TaoToken 统一接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 19:41:37 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →