使用正确的工具完成工作:嵌入式编程

2022-09-02 22:59:54

我对非常适合嵌入式编程的编程语言感兴趣。特别:

是否可以对嵌入式系统进行C++?还是使用纯C更好?或者,只有当语言的某些功能(例如RTTI,例外和模板)被排除在外时,C++才可以?

这个领域的Java呢?

谢谢。


答案 1

是否可以对嵌入式系统进行C++?

是的,当然,即使在8位系统上也是如此。C++只有与C略有不同的运行时初始化要求,即在调用main()之前,必须调用任何静态对象的构造函数。这的开销(不包括构造函数本身,这在你的控制范围内)很小,尽管你必须小心,因为构造的顺序没有定义。

使用C++您只需为使用的内容付费(许多有用的内容可能是免费的)。也就是说,例如,一段同样C++可编译的C代码通常不需要更多的内存,并且在编译为C++时执行速度不会比编译为C时慢。您可能需要小心C++的一些元素,但是许多最有用的功能都是以很少或没有成本获得的,并且受益匪浅。

还是使用纯C更好?

可能,在某些情况下。一些较小的8位甚至16位目标没有C++编译器(或者至少没有任何声誉),如果这是一个问题,使用C代码将提供更大的可移植性。此外,对于小型应用程序,在资源严重受限的目标上,C++可以带来的好处是微乎其微的。C++中的额外功能(主要是那些支持OOP的功能)使其适用于相对较大和复杂的软件构建。

或者,只有当语言的某些功能(例如RTTI,例外和模板)被排除在外时,C++才可以?

可接受的语言功能完全取决于目标和应用程序。如果内存受限,则可以避免使用昂贵的功能或库,即使这样,也可能取决于您缺少的是代码还是数据空间(在它们分开的目标上)。如果应用程序是硬实时的,则可以避免使用那些非确定性的功能和库类。

一般来说,我建议,如果你的目标是32位,总是使用C++而不是C,然后削减你的C++以适应内存和性能限制。对于较小的零件,在选择C++时要谨慎一些,但不要完全打折;它可以使生活更轻松。

如果您选择使用C++,请确保您拥有C++感知的像样的调试器硬件/软件。在C++构建复杂软件的相对容易程度,使一个体面的调试器更加有价值。并非所有嵌入式领域的工具都C++感知或有能力。

我总是建议在 Embedded.com 的档案中挖掘任何嵌入式主题,它有大量的文章,包括一些只是这个问题,包括:

关于Java,我不是专家,但它有大量的运行时要求,这使得它不适合资源受限的系统。您可能会将自己限制在使用Java的相对昂贵的硬件上。它的主要优点是平台独立性,但这种可移植性不会扩展到不支持Java的平台(其中有很多),因此可以说它比具有抽象硬件接口的精心设计的C或C++实现的可移植性更差。

[编辑]最近,我刚刚在TechOnline时事通讯中收到了这个:在嵌入式应用中有效地使用C++


答案 2

通常,在嵌入式系统中,您编程的语言取决于哪个编译器实际可用。
如果你的硬件只有一个C编译器,那就是你要使用的。如果它有一个体面的C++编译器,那么真的没有理由更喜欢C而不是C++。
我敢说Java在嵌入式系统中并不是一个非常流行的选择。


推荐