今天我和一位同事进行了一次非常有趣的对话,其中一个主题让我在今晚思考和谷歌搜索.在嵌入式环境中使用C++(而不是C).环顾四周,似乎有一些好的交易支持和反对C++提供的功能,但其他人迈尔斯显然支持它.所以,我想知道谁能够阐明这个话题,以及社区的普遍共识是什么.
嵌入式开发人员对C++的恐惧在很大程度上已成为过去,当时C++编译器不如C编译器(优化和代码质量明智).
这尤其适用于具有32位架构的现代平台.但是,C当然仍然是更受限制的环境的首选(如8位或4位目标的汇编程序).
因此,它实际上归结为您的目标平台提供的资源,以及您可能实际需要的这些资源中的多少,即您是否能够承担使用C++(甚至Java)进行嵌入式开发的"奢侈" ,因为你知道你几乎没有任何关于内存或CPU限制的问题.
如今,许多现代嵌入式平台(想想游戏机,移动电话,PDA等)已经成为非常强大的目标,具有RISC架构,几MB的RAM和3D硬件加速.
如果使用C或甚至汇编器对这些平台进行编程是不好的决定,那么在C++中编写16位PIC可能也是一个有争议的决定.
因此,为了改善开发体验(高级语言,更快的开发,更少的繁琐/冗余任务),实际上需要问自己多少力量,实际需要以及牺牲多少? .
嵌入式平台的C++非常好 - 只要你把它当作一个更好的C语言.我喜欢语言稍微有点结构化的事实.你仍然可以做你想用C做的所有事情.只记得坚持使用像Newlib或uClibc这样的嵌入式C库.
我特别喜欢使用C++构建的抽象,尤其是I/O设备.因此,我们可以为UART创建一个类,为GPIO创建一个类,以及什么不是.它比拥有一堆功能(恕我直言)更清洁.
它取决于您的嵌入式系统的特定性质以及您使用的C++的哪些功能.语言本身并不一定产生比C更笨重的代码.
例如,如果内存是你最严格的约束,你可以使用像"C with classes"这样的C++ - 也就是说,只使用直接成员函数,禁用RTTI,没有任何虚函数或模板.这将与等效的C代码几乎相同,因为你没有类型信息,vtable或冗余函数来混乱.
我发现当内存非常紧张时,模板是最大的避免,因为每个模板函数都有一个专用的模板,并且可以快速膨胀代码段.
在控制台视频游戏行业(这是嵌入式世界的一个强大的结尾)C++是王道.我们的限制是对内存(当前一代512mb)和实时性能的严格限制.通常使用虚函数和模板,但不是例外,因为它们使堆栈膨胀并且过于昂贵.实际上,一个主要制造商的编译器甚至根本不支持异常.