返回

文章详情

Flipper Zero Zig 模板

Hacker News2026年6月1日 13:20

Flipper Zero Zig 模板是一个现代的、可用于生产的模板,用于使用 Zig 编程语言开发 Flipper Zero 应用程序。该项目提供了一个简化的构建系统,将 Zig 与 Flipper Zero SDK 集成,允许开发者编写类型安全、内存安全的应用程序以适配 Flipper Zero 平台。 概述 该模板将 Zig 强大的构建系统和语言特性与 Flipper Zero 固件开发工具包连接起来。它处理了 Zig 的 ARM Cortex-M4 交叉编译与 Flipper SDK 之间的复杂集成,为自定义应用程序提供了一个干净的起点。 主要特点 - 原生 Zig 支持:全部使用 Zig 编写 Flipper 应用程序,利用其编译时安全保证和 C 互操作性 - 自动构建管道:与 ufbt(非官方构建工具)无缝集成,以打包 FAP 文件 - 跨平台开发:支持 macOS、Linux 和其他 Zig SDK 支持的平台 - 集成:为完整的 Flipper SDK(F7 目标)预配置的包含路径和编译器标志 - 交互式设置:指导初始化脚本以自定义应用元数据 - 快速启动:内置命令用于构建、打包和部署到 Flipper 设备 架构 该模板使用两阶段构建过程: - Zig 构建阶段:将 Zig 源码编译为 ARM Cortex-M4 目标文件(app.o) - 目标:thumb 架构,Cortex-M4 CPU 模型 - ABI:eabihf(嵌入式应用程序二进制接口,硬浮点) - 优化:ReleaseSmall,最小二进制大小 - UFBT 包阶段:将目标文件与 SDK 链接并打包为 .fap 格式。 - 由官方 Flipper 构建工具链处理 - 生成可部署的应用程序包 先决条件 - 所需工具: - Zig:版本 0.15.1 或以上(下载) - UFBT:非官方 Flipper 构建工具(安装指南) - Python 3:用于运行 ufbt 命令 - Flipper Zero SDK:由 ufbt 自动管理(安装到 ~/.ufbt) 平台特定设置 - macOS:该模板为 ARM64 macOS 预配置,ARM 工具链路径为:~/.ufbt/toolchain/arm64-darwin/arm-none-eabi/include。如果您使用不同的平台,可能需要在 build.zig:31 中调整 arm_libc_include 路径以匹配您的工具链位置。 安装 - 安装 UFBT:python3 -m pip install --upgrade ufbt - ufbt update - 克隆或下载该模板: - git clone https://github.com/yourusername/flipper-template.git - cd flipper-template - 初始化您的项目: - zig build init 该交互式脚本将提示您输入: - 应用 ID(例如,my_custom_app) - 显示名称(在 Flipper 菜单中显示) - 描述 - 作者名称 - GitHub 仓库 URL 使用 构建应用程序: - 将 Zig 源编译为目标文件: - zig build 这会创建 zig-out/bin/app.o,其中包含所有编译的应用程序代码。 创建 FAP 包: - 构建并打包完整应用程序: - zig build fap 这将运行完整的管道: - 将 Zig 源编译为目标文件 - 调用 ufbt 与 SDK 链接 - 在 dist/ 目录中生成 .fap 文件 部署到 Flipper: - 直接在连接的 Flipper Zero 上启动应用程序: - zig build launch 这会构建、打包并通过 USB 传输应用程序,然后自动启动它。 项目结构 flipper-template/ ├── application.fam # Flipper 应用清单(元数据,入口点) ├── build.zig # Zig 构建系统配置 ├── build.zig.zon # Zig 包清单 ├── icon.png # 应用图标(推荐 10x10px) ├── setup.sh # 交互式项目初始化脚本 ├── src/ │ └── root.zig # 主应用程序源代码 └── zig-out/ # 构建产物(生成) └── bin/ └── app.o # 编译后的目标文件 关键文件 - src/root.zig:包含 start() 函数和应用逻辑的入口点 - application.fam:Flipper 特定配置(应用 ID、类别、依赖关系、堆栈大小) - build.zig:定义编译目标、SDK 路径和构建命令 开发指南 最小应用程序结构 该模板包含一个 "Hello World" 示例,演示核心 Flipper API: // 导入 Flipper SDK 函数 const flipper = @cImport ({ @cInclude ("furi.h"); @cInclude ("gui/gui.h"); @cInclude ("gui/canvas.h"); @cInclude ("gui/view_port.h"); }); // 应用程序入口点(必须命名为 "start") export fn start (_ : ? * anyopaque) callconv (.{ . arm_aapcs = .{} }) i32 { // 初始化 GUI 视口 const gui = flipper.furi_record_open("gui"); const view_port = flipper.view_port_alloc(); // 设置回调和 UI // ...(请参见 src/root.zig 以获取完整实现) // 事件循环 _ = flipper.furi_thread_flags_wait(1, flipper.FuriFlagWaitAny, flipper.FuriWaitForever); return 0; } SDK 集成 该构建系统会自动为以下路径配置包含路径: - 核心 SDK:FURI(Flipper 通用运行时接口) - HAL:STM32WB55 的硬件抽象层 - 标准库:mbedTLS、nanopb、mlib - 协议库:Sub-GHz、NFC、RFID、红外 - 外设 API:GPIO、SPI、I2C、UART 所有头文件均可以通过 @cImport() 引入。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡