飞控固件的职责与安全边界¶
飞控固件不是“读取遥控器后给电机一个数值”的单一程序。它需要在确定的时间边界内完成硬件初始化、传感器采集、状态估计、控制计算、执行器输出、故障处理、参数管理、通信和日志记录。

从输入到物理响应¶
一条最小控制链包括:
- 传感器驱动取得角速度、加速度和其他观测量;
- 数据经过时间戳、比例、坐标变换、校准和滤波;
- 状态估计器计算姿态、速度、位置或其他状态;
- 遥控输入、任务规划器或上层导航产生目标值;
- 控制器根据目标与估计状态计算期望力和力矩;
- 控制分配或混控把期望量转换为各执行器命令;
- 输出驱动通过数字油门、脉宽或总线发送命令;
- 飞行器运动改变,传感器再次观测,闭环继续。
任何一个环节的单位、方向、时间或有效状态错误,都可能在后续环节被放大。
三类工作不能混在一起¶
启动阶段¶
启动阶段通常只执行一次,负责:
- 建立时钟、内存和基础硬件环境;
- 初始化板级引脚和电源控制;
- 启动总线和设备驱动;
- 读取并校验持久化参数;
- 检查硬件身份和固件目标;
- 建立任务、消息通道和日志;
- 进入可配置但默认不输出动力的状态。
启动完成不等于允许解锁。传感器健康、姿态估计、遥控链、电池和安全开关等条件仍需通过解锁前检查。
周期控制¶
周期控制按照固定或事件驱动的节奏反复执行,包括:
- 读取最新传感器样本;
- 更新估计状态;
- 生成控制目标;
- 运行控制器;
- 处理限幅和控制分配;
- 更新执行器输出;
- 监视截止期限和故障状态。
这条路径要求确定的时间上界。不能把不可预测的文件写入、网络等待或大量格式化输出直接放进高优先级控制路径。
后台工作¶
参数保存、日志落盘、地面站通信、文件传输和部分健康统计可以放在较低优先级任务中,但仍要限制资源占用。后台任务失控同样可能耗尽处理器时间、内存或总线带宽。
固件能控制什么,不能保证什么¶
固件可以:
- 检查已知状态;
- 拒绝不满足条件的解锁请求;
- 限制输出;
- 检测部分传感器、通信和执行器故障;
- 根据已配置策略降级、降落、返航或解除动力;
- 记录故障前后的数据。
固件不能单独保证:
- 螺旋桨安装正确;
- 电机和电调有足够热余量;
- 电源不会因焊点或连接器问题掉电;
- 全球导航卫星系统(GNSS,Global Navigation Satellite System)和磁力计没有环境干扰;
- 无线链路在所有环境中可靠;
- 任意故障后仍能安全返航;
- 修改后的控制算法在真实飞行中稳定。
软件安全结论必须与硬件、安装、环境和测试证据一起成立。
四类需要同时保存的工程产物¶
| 产物 | 至少记录 | 缺失后果 |
|---|---|---|
| 源码版本 | 仓库、提交哈希、子模块、补丁 | 无法知道实际构建了什么 |
| 构建信息 | 工具链、命令、板级目标、选项、产物校验值 | 无法复现同一二进制 |
| 运行配置 | 参数、校准、机型、端口和安全策略 | 同一固件表现可能完全不同 |
| 运行证据 | 日志、测试步骤、硬件版本和结果 | 无法证明修改是否安全 |
只备份固件文件而不保存配置,或者只保存配置而不知道固件提交,都不足以复现实验。
按风险给改动分级¶
| 级别 | 示例 | 最低验证要求 |
|---|---|---|
| 低 | 注释、文档、主机端工具文字 | 静态检查和相关测试 |
| 中 | 只读诊断、日志字段、非关键遥测 | 单元测试、仿真、资源和兼容性检查 |
| 高 | 传感器驱动、参数迁移、任务调度 | 仿真、硬件台架、故障注入和回滚验证 |
| 极高 | 状态估计、控制器、混控、解锁和失效策略 | 独立审查、分层测试、受控飞行和明确安全论证 |
改动行数不能代表风险。一个符号、单位或数组索引错误可能比新增几百行只读工具代码更危险。
开发前的硬门禁¶
- 使用专门的测试机和可恢复飞控,不直接修改唯一可用设备;
- 保留官方或已验证固件、原始参数和硬件接线记录;
- 首次刷写、驱动验证和输出检查必须拆除螺旋桨;
- 明确引导加载程序或串行线调试(SWD,Serial Wire Debug)恢复路径;
- 不在人员、财产或无线电敏感环境中验证未知行为;
- 每次测试只改变可解释的一组变量;
- 测试失败时先保留日志和版本信息,再恢复基线。
检查理解¶
- 为什么构建成功不能证明固件可以安全飞行?
- 周期控制任务为什么不应直接执行文件写入?
- 源码版本、构建产物和运行参数为什么必须同时保存?
- 日志字段改动为什么也可能影响实时性?
- 哪些条件满足前不能把自编译固件刷入真实飞控?