 入门指南:组件驱动的飞行软件框架与首个应用搭建)
F´ (F Prime) 入门指南组件驱动的飞行软件框架与首个应用搭建【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprimeF´F Prime是一个组件驱动的软件框架面向航天飞行软件及各类嵌入式应用的快速开发与部署最初由美国喷气推进实验室Jet Propulsion Laboratory开发并已在多个空间任务中得到实际部署。本文基于本仓库fprime的官方入门文档系统讲解 F´ 的框架定位、核心特性、环境安装、项目创建流程与故障排查方法并对照仓库源码说明这些能力在代码层面的落点帮助读者快速完成从环境准备到运行第一个 Hello World 应用的完整链路。F´ 是什么面向飞行软件与嵌入式系统的组件驱动框架F´ 的定位非常明确通过组件化的架构让开发者快速构建并部署航天飞行软件及其他嵌入式应用。官方入门文档docs/getting-started/index.md给出了如下定义F´F Prime是一个组件驱动的框架支持航天飞行软件及其他嵌入式应用的快速开发与部署。它最初由喷气推进实验室开发并已成功部署在多个空间应用上。它特别适合但不限于小规模航天系统如立方星CubeSat、小卫星SmallSat和科学载荷instruments。这意味着 F´ 并不是一个通用嵌入式 RTOS而是一套围绕组件、端口、拓扑组织软件的系统级框架开发者把飞行软件拆解为若干具有清晰接口的组件通过建模工具定义组件间的连接关系再由代码生成器自动产出 C 骨架最终把精力集中在领域业务逻辑的填充上。从本仓库的顶层目录结构可以直观看到框架的四大支柱对应 README.md 中的 What does F´ provide 一节仓库目录职责典型内容Fw/C 核心框架组件基类Fw/Comp/、端口抽象Fw/Port/、遥测/事件/命令/参数的数据结构Fw/Tlm/、Fw/Log/、Fw/Cmd/、Fw/Prm/、缓冲与时间等基础类型Os/操作系统抽象层任务、队列、互斥量、信号量、文件系统、时间的跨平台接口Os/Posix/、Os/Linux/、Os/Stub/等实现Drv/驱动与通信UART、I²C、SPI、GPIO 及 TCP/UDP 套接字等设备与链路驱动Svc/标准服务组件库指令分发Svc/CmdDispatcher/、遥测通道Svc/TlmChan/、事件管理、参数数据库、文件上下行、速率组等飞行就绪组件STest/场景化测试框架规则、场景、随机等单元测试辅助设施cmake/autocoder/自动代码生成FPP 模型到 C 的转换与代码生成脚本五大核心特性从组件架构到测试工具链入门文档用五条特性概括了 F´ 的能力边界配套的 docs/getting-started/features.md 则逐条展开了设计意图。这里结合仓库源码逐一解读1. 具有清晰接口的组件架构组件是 F´ 的基本单元组件之间通过**类型化端口typed ports**通信。docs/getting-started/features.md指出这种组件化架构带来高度模块化与软件复用——为一个应用编写的组件可以无缝复用到其他应用。在仓库中这一特性体现在两处端口与接口定义Drv/Interfaces/下的*.fpp文件如ByteStreamDriver.fpp、Gpio.fpp、I2c.fpp、Spi.fpp定义了驱动的标准端口Fw/Interfaces/定义了命令、遥测、事件、数据产品等框架级接口。复用证据FppTestProject/FppTest/是一个专门的 FPP 测试工程其中的组件、拓扑、接口测试覆盖了各种端口与组件形态印证了写一次、多处复用的可测试性设计。2. 提供核心能力的 C 框架框架内置队列、线程与操作系统抽象等核心能力。features.md明确说明框架与代码生成器提供了 F´ 部署所需的全部样板代码包括线程管理、组件间通信、命令/遥测/参数处理。在仓库中Fw/Comp/下的ActiveComponentBase、QueuedComponentBase、PassiveComponentBase分别对应主动自带任务线程、队列化、被动三种组件模型Os/目录则通过Task、Queue、Mutex、CountingSemaphore等抽象屏蔽了 Posix/Linux/裸机等平台差异。3. 系统设计与代码自动生成工具开发者用建模工具编写高层系统规格FPP 模型自动生成 C 实现骨架再填充领域代码。仓库中建模语言与转换定义位于 Fpp/ToCpp.fpp代码生成流水线位于 cmake/autocoder/包含 FPP 到 C 的转换脚本每个组件目录下的.fpp文件例如 Svc/ActiveRateGroup/ActiveRateGroup.fpp就是这种模型驱动写法的直接体现.fpp声明端口、命令、遥测与事件同名.cpp/.hpp承载实现。4. 飞行就绪的标准组件库features.md强调F´ 附带大量经过飞行验证的现成组件覆盖嵌入式系统的大部分常规功能——指令、遥测采集、系统事件采集、地面交互等多数时候应用的大部分工作已经完成。仓库中 Svc/ 目录即为该组件库CmdDispatcher指令分发、TlmChan遥测通道、EventManager事件管理、PrmDb参数数据库、FileUplink/FileDownlink文件上下行、BufferManager缓冲区管理、ActiveRateGroup速率组调度等设备侧则由 Drv/ 提供 UART、I²C、SPI、GPIO 与 TCP/UDP 驱动。开发者通常只需为特定用例开发少量自有组件。5. 单元级与系统级测试工具框架自带单元测试与系统集成测试设施。仓库证据STest/ 提供基于规则Rule与场景Scenario的测试框架FppTestProject/FppTest/ 内含大量针对数组、枚举、结构体、组件、状态机、类型大小等的测试工程TestDeploymentsProject/Ref/ 是参考部署Reference Deployment可作为系统级集成测试与部署结构的样例。features.md还将这些能力总结为五类标准工具样板代码自动生成Autocoder、基于 CMake 的跨平台构建系统、可对接真实硬件的开发用地面系统GDS、针对 F´ 代码的单元测试框架、以及系统级集成测试框架。系统要求安装前的环境清单安装前请确认工作站满足以下要求详见 docs/getting-started/installing-fprime.md操作系统Linux、macOS或 Windows 上的 WSLgit编译器Clang 或 GNU C/C如gcc、gPython 3.10、虚拟环境venv与 PIP建议使用最新版 PIP版本建议见下文故障排查表可选Rust 工具链cargo、rustc仅构建依赖 Rust 的组件时需要当cargo不在PATH中时相关组件会被自动跳过框架其余部分正常构建。此外对于 x86_64/aarch64 之外的构建主机架构或 PIP 版本较旧的系统还需要安装 Java。Ubuntu/Debian 用户的 Python/PIP 安装注意事项见下文故障排查。创建你的第一个 F´ 项目F´ 的工具生态以 Python 包形式通过 PIP 分发并由F´ Bootstrap 工具装入项目的虚拟环境官方推荐每个项目一个虚拟环境。整体流程如下。第 1 步安装 Bootstrap 工具pip install fprime-bootstrap提示部分 macOS 用户会遇到 SSL 错误可先按下文macOS 上的 SSL 错误修正后再重试。第 2 步创建新项目fprime-bootstrap project命令会交互式询问项目信息示例应答如下[1/2] Project repository name [my-fprime-project]: my-project [2/2] Project top-level namespace [MyFprimeProject]: MyProject该命令执行两个动作创建一个带标准 F´ 项目结构的新 git 仓库在项目内创建虚拟环境并安装依赖。从本仓库的部署样例可以预期新项目骨架的样子TestDeploymentsProject/Ref/展示了典型参考部署的目录组织拓扑.fpp、组件实现、CMakeLists.txt、settings.ini等仓库根目录的 settings.ini 则演示了构建工具的配置文件格式。第 3 步激活虚拟环境cd my-project . fprime-venv/bin/activate⚠️ 重要每次使用该项目时都要记得先激活虚拟环境。激活后即可使用fprime-util构建/运行/测试、FPP 编译等整套工具链。这一步也与本仓库 README 的 Getting Started 一节描述一致pip install fprime-bootstrap后创建项目随后进入 HelloWorld 教程走完开发全流程。在已有项目中工作对于已获取的 F´ 项目安装其关联工具的步骤如下同样见 installing-fprime.md先为该项目创建并激活虚拟环境获取项目代码——使用 git 且带子模块时务必执行git submodule update --init --recursive安装指定版本的 F´ 工具pip install -r project/fprime/requirements.txt注意如果项目自带requirements.txt优先使用项目自己的文件。本仓库根目录恰好就有一份 requirements.txt列出了 F´ 框架自身依赖的 Python 工具版本是既有项目按 requirements 安装的实际样例。故障排查常见安装问题速查installing-fprime.md的 Troubleshooting 章节按平台整理了已知问题完整收录如下。PIP 版本推荐表部分 F´ Python 包建议用较新的 PIP 安装不满足推荐版本的系统将需要 Java并以较慢速度运行 FPP 工具系统推荐的pip版本macOS (10.9) 21.0.1x86_64 19.3aarch64 20.3fprime-util: command not found若在虚拟环境中使用却提示command not found多半是新终端里没有 source 环境。先在终端中激活. path/to/project/fprime-venv/bin/activate如果不使用虚拟环境安装PIP 有时会把用户工具装到$HOME/.local/bin需要把该目录加入PATH。Helper script fpp-redirect-helper exited with reason: Permission denied该错误通常是辅助脚本fprime/cmake/autocoder/fpp-wrapper/fpp-redirect-helper丢失了执行权限。先进入其目录确认cd fprime/cmake/autocoder/fpp-wrapper/ ls -l若确认不可执行恢复权限chmod 700 fpp-redirect-helperWindows Subsystem for Linux (WSL) 版本 1Bad CPIU ErrorWSL 1 已不再受支持在 WSL1 上生成与构建会非常慢且常出现Bad CPIU Error。必须使用 WSL1 的用户需要直接安装 FPP 编译器。Ubuntu / DebianJava 与 Python PIPUbuntu 及多数 Debian 变体默认的 Python 3 并不包含 pip 包。在 Ubuntu/Debian 系系统上先安装完整依赖sudo apt install git cmake default-jre python3 python3-pip python3-venv之后即可正常完成安装。macOS 上 Python 3.8 的 SSL 错误Homebrew 安装的 Python 不适用此修复建议改用 python.org 发布的 Python。Python 3.8 自带的 OpenSSL 需要访问 macOS 根证书若安装 fprime 时遇到Failed find expected download: urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate在 macOS 终端中安装必要证书cd /Applications/Python\ 3.X/ ./Install\ Certificates.command然后重新尝试安装fprime-bootstrap。Apple SiliconBad CPIU Error未安装 Rosetta 的 Mac 用户会遭遇Bad CPIU Error请安装 Rosetta或直接安装 FPP 编译器。下一步Hello World 教程与进阶学习路径入门文档强调新用户应从 Hello World 教程开始它完整走一遍 F´ 的安装过程、如何创建新项目以及如何设计、实现并测试一个基本的 F Prime 应用。本仓库的教程索引位于 docs/tutorials/index.md其中按推荐顺序列出了Hello World创建 F Prime 项目设计、实现并测试基础组件——新用户首选LED Blinker面向嵌入式硬件的项目开发覆盖管理组件、硬件驱动与交叉编译目标是在 ARM 硬件上点亮 LED并引入事件、遥测、命令与参数概念Math Component使用自定义端口与数据类型构建应用深入事件、遥测、命令、参数的高级用法并讲解组件单元测试Cross-Compilation Setup安装交叉编译所需依赖Arduino LED Blinker基于 LED Blinker用fprime-arduino工具链在 Arduino 微控制器上测试。完成入门后可继续深入以下资料F´ 特性详解了解框架在复用性、快速部署、可移植性、高性能、适应性、可分析性、标准组件库与标准工具链等方面的设计取舍F´ 用户手册涵盖技术总览、框架机制拓扑构建、内存管理、状态机、支持的平台、地面数据系统GDS使用、设计模式、CMake 构建系统与安全等章节安装与故障排查安装细节与常见问题的最新说明。结语从入门文档到仓库代码的对应关系入门文档描述的每一条能力都能在本仓库中找到具体落点组件与端口定义对应Drv/Interfaces/、Fw/Interfaces/与各组件目录下的.fpp文件C 框架对应 Fw/ 与 Os/标准组件库对应 Svc/测试工具对应 STest/ 与 FppTestProject/自动代码生成对应 cmake/autocoder/ 与 Fpp/ToCpp.fpp。建议读者在跟随 Hello World 教程动手实践的同时对照上述目录阅读源码从而把组件—端口—拓扑—生成—测试的完整开发范式建立起来。【免费下载链接】fprimeF´ - A flight software and embedded systems framework项目地址: https://gitcode.com/GitHub_Trending/fpr/fprime创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考