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测试用例怎么设计。这个更接地气,全是实战经验。