|
|
1
6
嵌入式平台的C++是非常好的——只要你把它当作一个更好的C,我喜欢语言稍微结构化的事实。你仍然可以用C做所有你想做的事情。只要记住坚持使用嵌入式C库,比如Newlib或uClibc。 我特别喜欢使用C++来构建的抽象,尤其是对于I/O设备。所以,我们可以有一个用于UART的类和一个用于GPIO的类。它比拥有一堆函数(IMHO)更干净。 |
|
|
2
6
在C++开发人员中,C++编译器没有C编译器(优化和代码质量明智)那么大,所以对C++的恐惧在很大程度上已经成为过去。 这尤其适用于具有32位体系结构的现代平台。 但是,对于更为受限的环境(对于8位或4位目标而言,汇编程序也是如此),C无疑仍是首选。 所以,这实际上归结为你的目标平台提供的资源,以及你可能需要的资源,即如果你能负担得起在C++中做嵌入式开发的“奢侈”(甚至是java),因为你知道你几乎不会有任何关于内存或CPU限制的问题。 如今,许多现代嵌入式平台(比如游戏机、手机、PDA等)已经真正成为功能强大的目标,具有RISC体系结构、数MB的RAM和3D硬件加速。
因此,真正的问题是问问自己,为了改善开发体验(高级语言、更快的开发、更少的繁琐/冗余任务),您实际需要多少功能,以及您可以牺牲多少功能。 |
|
|
3
5
这取决于嵌入式系统的特定性质和C++使用哪些特性。语言本身并不一定生成比C更大的代码。 例如,如果内存是最严格的约束,那么你可以只使用C++类似“C类”,也就是说,只使用直接成员函数,禁用RTTI,而不具有任何虚拟函数或模板。这将与等效的C代码放在几乎相同的空间中,因为您没有类型信息、vtables或冗余函数来把事情弄得乱七八糟。 我发现,在内存非常紧张的情况下,模板是最需要避免的事情,因为对于它所专用的每种类型,每个模板函数都有一个副本,这会迅速膨胀代码段。 在控制台视频游戏行业(这是嵌入式世界的高端)C++是王道。我们的限制是对内存(当前一代为512mb)和实时性能的严格限制。通常使用虚拟函数和模板,但不使用例外,因为它们会使堆栈膨胀,而且性能成本太高。事实上,一家主要制造商的编译器甚至根本不支持异常。 |
|
4
2
在我以前的公司,由于安全性(SIL-2)和内存原因,所有嵌入式代码都是用C代码的一小部分编写的。通过引入一个更丰富的语言,比如C++,在特定的场景下可能会带来更多的麻烦而不是好处。
我敢打赌,在某些情况下,C++对于嵌入式应用程序来说是很好的,但它确实取决于应用程序——如果你的程序控制着核电站或者管理手机上的地址簿,那么就有区别了。 |
|
|
5
1
我不知道“普遍共识”,只知道我工作的那家公司(它在手机、汽车导航系统、DPF等方面做了大量开发)。 与C++相比,我在嵌入式平台上使用C++遇到的主要缺点是它不太容易移植——如果编译器需要在1以上的编译程序中编译代码或者在执行过程中完全有bug,编译器就有很多不遵守标准的问题。还有一些环境,C++代码根本不会运行REBLE的可重新定位代码的问题,它的“原生OOP”不能用“常规”C++类和继承来玩得很好。 不过,最后,如果您只针对一个平台,我会说,使用您认为“更好”(更快、更少的bug、更好的设计)的任何东西进行开发——在大多数情况下,这些问题可以很容易地解决。 |
|
|
6
1
取决于您正在进行的嵌入式开发类型。我已经在各种平台上使用C++、C和汇编进行了嵌入式开发,甚至可以使用java编写智能手机上的应用程序。 例如,在运行Windows CE 5的智能手机类设备上,几乎所有代码都是C++,包括在操作系统中。在C或汇编语言中只写入小的位。 另一方面,我编写了一个MSP430微控制器的代码,它在C中,如果编译器更可靠和标准兼容,我可能会在C++中完成。
|
|
|
7
1
现在,它将全部归结为平台的C++运行时支持。你可能找到一种方法来编译C++代码,几乎可以用GCC来编译任何嵌入式平台,但是如果你找不到适合C++平台的运行时,你的努力将是徒劳的,除非你自己编写C++运行时。 |
|
|
8
0
我倾向于同意莱纳斯的几点是他对C++的看法。 http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918 除此之外,如果你真的想使用C++,你可能想看看 http://www.caravan.net/ec2plus/ 它描述了嵌入式C++,或者说你不应该在C++中使用嵌入式系统。 |
|
|
9
0
长期以来,使用C++的一个大问题就是VxWorks对它的支持,它确实被吸引了。这一点在VxWorks 6上得到了改善(是的,已经有一段时间了……良好的ole供应商锁定和缺乏公司愿景使我们一直停留在VxWorks 5.5上)。 所以对我们来说,这主要是一个环境问题。之后,C++显然可以和C.一样好。这是一个人们理解他们的工具做什么以及如何使用它的问题。C++可以使编写效率很低的代码变得更容易,但这并不意味着我们必须对它进行编码。 |
|
|
10
0
我的观点是C++有一些优点,但是我会远离例外和标准模板库。我们在使用虚拟函数时没有遇到问题。 |
|
|
11
0
C++适合于没有OS的微控制器和设备。您只需了解系统的体系结构,并意识到时间和空间限制,尤其是在执行任务关键型编程时。 使用C++,你可以做抽象,这通常会导致代码中的足迹增加。在为资源有限的机器(如8位MCU)编程时,不希望出现这种情况。
对虚拟函数要小心,因为它们的资源开销是每个类一个vtable,每个对象一个指向vtable的指针。此外,使用const代替#define。 当您移动到16位和32位MCU,使用10s或100s MB RAM时,可能会使用上面提到的更重的功能。 因此,对于嵌入式系统来说,C++是很有用的。一个主要的好处是,当您想要抽象微控制器的某些方面时,OOP非常有用,例如UART或状态机。但是,您可能希望始终避免使用某些功能,而有时则希望避免使用某些功能,这取决于您的编程目标。 |
|
AstralHex · 矩阵乘法代码工作不正常 9 月前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 10 月前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 10 月前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 10 月前 |