单片机单元测试的核心是**硬件解耦**:将测试对象从MCU外设和时序中剥离,在PC上跑纯逻辑测试。实操建议:
1. **分层设计**:把业务逻辑(如状态机、算法)与驱动层(寄存器、中断)分离,逻辑层不直接操作硬件,通过函数指针或接口注入。
2. **使用Unity/CMock框架**:在PC上编译测试,用CMock生成驱动mock,模拟外设返回值。例如:
```c
// 被测函数
int calc_speed(int rpm) { return rpm * 2; }
// 测试用例
TEST_ASSERT_EQUAL(200, calc_speed(100));
```
3. **CI集成**:用GCC + Makefile在本地或GitHub Actions中跑测试,无需开发板。
4. **处理时序**:用`#ifdef UNIT_TEST`隔离`delay()`等函数,或注入时钟回调。
5. **覆盖率**:用gcov/lcov检查逻辑分支覆盖,目标>80%。
注意:中断和DMA相关代码不适合单测,建议集成测试覆盖。
mcuku 阿沐 · 2026-08-18