嵌入式开发也可以用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++在嵌入式中表现如何? - 知乎
嵌入式开发也可以用C++?相关推荐
- 嵌入式开发在过去20年中是如何演变的
嵌入式开发在过去20年中是如何演变的 How embedded development has evolved over the past two decades 与任何开发领域一样,嵌入式系统开发就 ...
- 嵌入式开发「坑」太多?MathWorks 高级工程师教你 debug
文/ 朱雪妍 据博思数据发布的<2018-2023年中国嵌入式软件行业市场发展现状调研与投资趋势前景分析报告>表明:2018年上半年我国嵌入式系统软件收入达4240.2亿元,累计增长6.6 ...
- 嵌入式开发中DSP与FPGA的关系
嵌入式开发中DSP与FPGA的关系 常所说的单片机侧重于控制,不支持信号处理,属于低端嵌入式处理器,arm可以看做是低端单片机升级版,支持操作系统管理,更多接口如网卡,处理能力更强;fpga是可编程逻 ...
- 嵌入式开发输出调试信息的几种方法(常规法及非常规法)
这篇文章对于研发查找问题和测试都有很大帮助,在这里保存记录一下. 论语>有云:"工欲善其事,必先利其器".输出调试信息是软件开发中必不可少的调试利器,在出现bug时如果没有调 ...
- 重磅直播|嵌入式开发漫漫之路—从小白到技术骨干
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 大家好,本公众号现已开启线上视频公开课,主讲人通过B站直播间,对3D视觉领域相关知识点进行讲解,并在微 ...
- c语言嵌入式开发单片机,嵌入式开发|单片机基础
嵌入式开发它是一个综合的技能学习,既要去学习基本的Linux编程,又要学习物理机的操作使用,要想学习嵌入式的开发,在前面的文章中已经是跟大家说过了,嵌入式开发的学习需要掌握的基础课程还是比较多的,单片 ...
- Google 开源 Pigweed,涉足嵌入式开发
2020-03-22 14:22 导语:虽然 Google 声明这并不是操作系统,但谁知道下一步呢? 雷锋网AI源创评论报道,Google 不久前在官方博客上宣布了开源 Pigweed 的消息.[1] ...
- 嵌入式开发从业人员生存状况
为什么80%的码农都做不了架构师?>>> 据调查数据显示,嵌入式开发人才需求目前仍然是供不应求,接近80%参与调查的工程师都表示,自己公司目前都急缺嵌入式开发方面的人才.专业的 ...
- rust做嵌入式开发_Rust 嵌入式开发 STM32 amp; RISC-V
Rust 嵌入式开发 STM32 & RISC-V 发布于 2020-04-03 11:07:06 本帖最后由 wuhanstudio 于 2020-4-3 11:58 编辑 更新地址: [m ...
- 嵌入式开发 ---必看图书
1.<linux驱动设备驱动开发详解> 基于linux4.0 是目前主流的 嵌入式开发用的系统 整个开发流程很详细,是嵌入式开发的入门之选,在2021年之前是没有任何图书有这么详细的教程的 ...
最新文章
- c语言课设代写一般多少钱_厕所疏通一般多少钱
- Java、Android静态代理与动态代理
- StringBuffer、StringBuilder、ArrayList、Vector、HashMap、HashTable 的扩容机制
- 提高Python程序运行效率三种模式第一种:多进程multiprocessing模块
- Java黑皮书课后题第5章:5.13(求满足n的三次方<12000的n的最大值)使用while循环找出满足n的三次方<12000的n的最大值
- 检查列表中的所有元素在Python中是否相同
- UnrealEngine4-Roadmap
- oracle数据库主主复制
- 03-es6语法 Promise 和 es8语法 async await 的了解和基本使用
- vue+webpack实践
- jmeter的安装和测试
- SQLServer数据库备份与还原
- 2015年国民经济和社会发展统计公报
- 蓝湖及PS测量设计稿的使用
- ArcGIS根据矢量图层范围裁剪影像
- Windows11硬盘读写速度变慢的解决方法
- 南昌航空大学计算机控制实验,南昌航空大学关于实验教学的管理办法
- 【多线程】多线程到底是个甚——多线程初阶(复习自用)
- Fluent多组分设置及化学反应
- 扫一扫跳转到微信非官方网页提醒页面解决方案