主流的MCU开发用C而不是C++,核心原因是“够用且省事”,具体可以从以下几点理解:
-
资源限制
MCU的内存和存储空间通常只有几KB到几百KB,C语言生成的代码更精简,运行时占用资源少。
C++的虚函数、异常处理等高级特性会增加额外开销,即使能通过编译器选项关闭,但默认情况下C更省心。 -
开发习惯
传统MCU工程师多为电子、自动化等非计算机专业出身,C的语法简单直观,学习成本低。
很多项目规模小(比如一两人开发),用C的全局变量和函数就能搞定,没必要引入C++的类、模板等复杂概念。 -
工具链支持
厂商提供的SDK、驱动库基本都是C写的,用C能直接调用,省去适配C++的麻烦。
部分老旧MCU的编译器甚至不支持C++,或者支持得很差(比如某些51内核芯片)。 -
实时性要求
C代码的执行时间更容易预测,适合对时序敏感的嵌入式场景(比如电机控制)。
C++的动态特性(如多态)可能引入不确定性,调试起来更头疼。 -
历史惯性
早期MCU性能极弱,只能用C或汇编,积累了大量C生态(代码、教材、工程师经验)。
即使现在MCU性能提升,但“够用就不改”的心态让C仍是主流选择。
例外情况:
- 复杂项目(比如带GUI或多任务)可能会用C++,比如Arduino和mbed框架。
- 大厂(如华为、大疆)在大型嵌入式系统中倾向于C++,因为代码复用和可维护性更重要。
- 但这类项目在MCU领域占比小,大部分还是“点亮LED+读传感器”的简单需求,C依然是最优解。