4、BIT测试策略制定:上电BIT、周期BIT、维护BIT、启动BIT
好,咱们接着聊。上一节我们把BIT的架构搭起来了,这一节要解决一个更实际的问题:什么时候测?怎么测?
说白了,BIT测试策略就是给飞控计算机安排一套体检方案。你不能让飞行员在天上做CT扫描,也不能等到飞机趴窝了才想起来做检查。我个人的习惯是,把BIT分成四个维度:上电、周期、维护、启动。这四个维度覆盖了飞控全生命周期。
4.1 上电BIT(PBIT)—— 开机自检,过时不候
上电BIT,也叫Power-On BIT。飞机一上电,飞控计算机还没开始干活,先给自己做个全面体检。
核心特点:
- 一次性执行:只在系统上电时运行一次
- 覆盖最全:CPU、内存、Flash、IO接口、传感器,能测的全测
- 耗时最长:我见过有些老型号的飞控,PBIT跑完要30秒
- 结果决定命运:PBIT失败,系统直接拒绝启动
我的经验:PBIT的测试项要分优先级。核心功能(CPU、内存、关键传感器)必须测,非核心功能(比如某些辅助接口)可以跳过。我在一个项目中遇到过PBIT时间太长,飞行员在地面等得不耐烦,直接断电重启——结果更慢了。后来我们把PBIT压缩到8秒以内,问题解决。
典型测试流程:
// 伪代码示例:上电BIT主流程
void PowerOnBIT(void)
{
// 1. CPU自检
if (CPU_SelfTest() != PASS) {
SetFault(FAULT_CPU);
HaltSystem();
}
// 2. 内存测试(March算法)
if (MemoryTest(0x80000000, 0x100000) != PASS) {
SetFault(FAULT_MEMORY);
HaltSystem();
}
// 3. Flash校验(CRC)
if (FlashCRCVerify() != PASS) {
SetFault(FAULT_FLASH);
HaltSystem();
}
// 4. 传感器自检
SensorSelfTest();
// 5. 结果上报
ReportBITResult(BIT_POWER_ON, PASS);
}
4.2 周期BIT(CBIT)—— 飞行中的“心电图”
飞机飞起来了,PBIT已经过了,但硬件还在工作,会不会突然出问题?
周期BIT就是干这个的。它在系统正常运行期间,循环往复地执行,有点像医院里的心电监护仪。
核心特点:
- 后台运行:不干扰主任务,利用空闲时间片
- 轻量级:每次只测一小部分,避免影响实时性
- 循环周期:通常100ms~1s执行一次
- 故障上报:发现问题立即上报,但不强制停机
避坑指南:我曾经把CBIT的传感器测试放在主循环里,结果导致控制周期抖动。后来改成用DMA+定时器触发,彻底解决了。记住:CBIT不能抢主任务的CPU时间。
典型实现:
// 周期BIT调度器
void CyclicBIT(void)
{
static uint8_t step = 0;
switch(step) {
case 0: CheckIMU(); break; // 检查IMU状态
case 1: CheckGPS(); break; // 检查GPS信号
case 2: CheckActuator(); break; // 检查舵机反馈
case 3: CheckVoltage(); break; // 检查电源电压
default: step = 0; break;
}
step = (step + 1) % 4; // 循环执行
}
4.3 维护BIT(MBIT)—— 地勤的“深度体检”
维护BIT,也叫MBIT(Maintenance BIT)。这个不是给飞行员用的,是给地勤维护人员用的。
你想想看,飞机飞了几百个起落,有些故障是间歇性的,PBIT和CBIT都抓不到。这时候就需要MBIT上场了。
核心特点:
- 人工触发:通过地面维护终端启动
- 深度测试:可以做边界测试、压力测试、老化测试
- 耗时较长:几分钟到几十分钟不等
- 可重复执行:同一个测试项可以反复跑,用于故障复现
注意:MBIT执行期间,飞控系统不能用于飞行。一定要有安全互锁机制,防止地勤误操作导致飞机在地面启动发动机。
我常用的MBIT测试项:
| 测试项 | 测试内容 | 典型耗时 |
|---|---|---|
| 内存全量测试 | March C-算法,覆盖所有地址 | 30秒 |
| 传感器精度标定 | 对比已知参考值,计算偏差 | 2分钟 |
| 通信链路压力测试 | 发送最大数据包,检查丢包率 | 1分钟 |
| 舵机全行程测试 | 从0°到最大角度,来回三次 | 5分钟 |
4.4 启动BIT(IBIT)—— 快速确认,准备起飞
启动BIT,也叫Init BIT。这个跟PBIT有点像,但更轻量。
嗯,这里要注意区分:PBIT是上电后第一次运行,IBIT是每次系统复位或从休眠状态唤醒时运行。说白了,IBIT是PBIT的“精简版”。
核心特点:
- 快速执行:通常1~2秒完成
- 只测关键项:CPU、内存、关键传感器
- 用于热启动:系统从休眠恢复时执行
- 结果可跳过:某些场景下允许IBIT失败后继续运行
我的建议:IBIT的测试项要跟PBIT有区分。PBIT测过的,IBIT可以不再测。比如Flash校验,PBIT已经做了,IBIT就没必要再做。这样可以节省时间。
四种BIT的对比:
| 类型 | 触发时机 | 覆盖范围 | 耗时 | 失败后果 |
|---|---|---|---|---|
| 上电BIT | 系统上电 | 全面 | 长(5~30秒) | 禁止启动 |
| 周期BIT | 运行期间循环 | 部分 | 短(毫秒级) | 上报故障 |
| 维护BIT | 人工触发 | 深度 | 很长(分钟级) | 记录日志 |
| 启动BIT | 复位/唤醒 | 关键 | 很短(1~2秒) | 可跳过 |
最后说一句:这四种BIT不是孤立的。我在实际项目中,会把PBIT的结果保存到非易失存储器,CBIT运行时可以引用PBIT的数据做对比。MBIT则可以利用CBIT积累的历史数据做趋势分析。说白了,它们是一个有机的整体。
下一节,我们聊聊BIT测试用例怎么设计。这个更接地气,全是实战经验。