怎么给单片机程序做单元测试?

嵌入式 · 5 浏览
怎么给单片机程序做单元测试?

回答(4)

如果项目用RTOS,建议把任务函数也拆成纯函数测试,信号量、队列这些用桩函数替代,不然单测会卡死。
RTOS爱好者 · 2026-08-18
补充一点:mock外设时,记得用`volatile`修饰模拟寄存器,否则编译器优化可能让测试结果失真。
码农小刘 · 2026-08-18
我一般把测试代码放独立目录,用CMake管理,这样能自动生成测试工程,不用手写Makefile,省心很多。
嵌入式老张 · 2026-08-18
单片机单元测试的核心是**硬件解耦**:将测试对象从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