嵌入式开发也可以用C++?

2019年, EE Times 曾对嵌入式项目中的编程语言做过一个调查。其中,C语言以56%的占比稳居第一,C++以23%紧随其后。手头的嵌入式开发项目也是用的C++,于是想总结一下嵌入式中C++的使用心得。

在嵌入式开发中,按照应用领域可以简单划分为:单片机 MCU,Linux 驱动/应用。在嵌入式Linux开发中,C++已经是绝对的应用层主力之一。本文所针对的应用领域主要是单片机MCU开发。

1. 为什么要用C++取代C呢?

C++是C的超集,有许多C语言不具备的优势:

  • 面向对象编程特性,能够通过接口实现底层代码。简单说,就是 C with class。
  • 许多C语言不存在的特性:templates,多态,运算符重载等等。
  • 通过接口的方式隐藏底层的实现。
  • 通过将代码的变化封装在一个对象上,最大限度地减少重复测试和维护。
  • 由于将一切封装在功能单元中,可以提高代码的重复使用。
  • 更加严格的类型检查,可以减少bug。

当然,以上方法大部分都可以通过C来实现,比如C++的类可以用C的函数指针来实现,但是大量的函数指针不仅会降低代码的可读性,也会极大地增加代码量。C++则可以在编译器层面有效改善这种情况,主流单片机的编译器也已经兼容C++。

2. 不适用于嵌入式的C++特性

C++特性更多,功能更强大,但是受到单片机资源和应用场景的限制,并不是所有特性都适用。以下项目尤其需要特别注意:

  • 开发成本很高的特性:STL 库,异常处理,运行时类型信息(RTTI) 。 
  • 由于安全方面的原因,一些特性也是不推荐的。
  • 有时候很难确定你的源代码和反汇编之间的关系。
  • 事件驱动型代码很难理解和调试。

3. C++的低效性

一直有一种声音认为C++在嵌入式系统中比较低效,无论是速度还是大小,这到底是事实还是偏见?下边我们将C++的特性,与C语言实现效率进行对比,按照性价比由高到低可以分为三个等级:

  • 高性价比:没有额外成本。
  • 中性价比:带来少量的成本。
  • 低性价比:成本非常高。

将C++的特性对号入座,我们便有了下边这张图。其中,Templates 模板比较特殊,性价比的高低取决于具体的应用。在我们的嵌入式项目中,就是用Templates实现的底层代码,后期可以单独写一个例子。

那么,如何从C逐步过渡到C++呢?有如下参考:

  • 始终使用一个命名惯例,区别类型、字段和变量的命名。
  • 注意显式类型转换,比如从一个通用的类型 void* 或者 int 转换到 int* 或者 enum 时。
  • 为你使用的所有函数声明原型。
  • 显式确定你所用的类型,切勿相信隐式的返回值或变量的类型。
  • C++可以调用原有C项目的代码。

最后,在网上看到很多对比C++与C的文章,十分认同一句话——“作为开发者,编程思想远远比语法糖重要的多。C with Class是编程思想的进步,虽然在语法难度上面它不值一提。”

相关参考:C++在嵌入式中表现如何? - 知乎

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 嵌入式开发需要掌握的技能包括:嵌入式系统的硬件知识、嵌入式软件开发嵌入式系统架构设计、嵌入式系统测试、嵌入式系统调试和优化等方面的知识。具体来说,需要掌握C/C++等编程语言,掌握嵌入式系统的操作系统、微处理器、外设等硬件知识,掌握常用的嵌入式软件开发工具和开发流程,以及掌握常用的调试工具和方法等。此外,对于一些特定的嵌入式应用场景,还需要掌握相关领域的知识,例如汽车电子、智能家居、医疗器械等。 ### 回答2: 嵌入式开发是指开发嵌入式系统或嵌入式软件的过程。嵌入式系统是一种特殊的计算机系统,其硬件、软件和固件嵌入到特定的物理设备中,用于控制、监测或执行特定的功能。 要学习嵌入式开发,首先要掌握计算机体系结构和操作系统的基本原理。了解计算机的运作方式和基本组成部分,包括中央处理器、内存、输入输出设备等,可以帮助开发人员理解嵌入式系统的底层工作原理。 其次,学习编程语言嵌入式软件开发工具是必不可少的。常用的编程语言包括C和C++,它们在嵌入式开发中广泛应用于编写设备驱动程序、控制算法和应用程序。此外,掌握嵌入式软件开发工具如编译器、调试器和仿真器等,可以帮助开发人员进行程序调试和性能优化。 另外,了解电子电路和电子设计是嵌入式开发的关键。了解电子元器件如传感器、执行器和通信接口等的工作原理,以及设计和布线电路的技术,可以帮助开发人员进行硬件和软件的集成工作。 最后,深入学习嵌入式系统的特定领域知识也是必要的。不同领域的嵌入式系统有不同的要求和应用场景,比如汽车电子、医疗设备、智能家居等。对于特定领域的了解,可以帮助开发人员理解和满足客户的需求。 总之,嵌入式开发需要学习计算机体系结构、操作系统、编程语言嵌入式软件开发工具、电子电路和特定领域知识等多个方面的知识。只有全面掌握这些知识,才能够进行高效和可靠的嵌入式开发工作。 ### 回答3: 嵌入式开发是一种专门针对嵌入式系统进行软件与硬件开发的技术领域。想要从事嵌入式开发工作,需要学习以下几个方面的知识: 1.硬件基础知识:嵌入式开发涉及到与硬件紧密配合的软件开发,因此需要了解基本的电路和电子设备原理,了解数字和模拟电路以及各种传感器、执行器的工作原理。 2.嵌入式系统架构:了解嵌入式系统的结构和组成部分,熟悉各种微控制器和单片机的特性和功能,掌握嵌入式开发所需的处理器架构、总线结构、存储器管理等方面的知识。 3.编程语言:熟练掌握至少一种常用的嵌入式开发编程语言,如C、C++或汇编语言等,了解这些语言嵌入式开发中的应用场景和编程技巧。 4.嵌入式操作系统:了解常见的嵌入式操作系统,如嵌入式Linux、RTOS等,掌握其原理和使用方法,能够进行系统配置、任务调度和驱动开发等操作系统相关的工作。 5.通信协议:掌握嵌入式系统与外部设备之间的通信协议,如UART、SPI、I2C、CAN等,能够进行通信接口的配置和驱动开发。 6.调试与测试:了解常用的嵌入式调试和测试工具,掌握使用示波器、逻辑分析仪等硬件设备进行系统调试和性能优化。 7.项目实践:通过实际项目的开发实践,能够综合运用上述知识,独立完成嵌入式系统的设计、开发和调试,并具备解决实际问题的能力。 总之,嵌入式开发需要通过学习硬件基础、系统架构、编程语言、操作系统、通信协议等各方面的知识,并通过项目实践不断提升自己的技能和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值