我对适合嵌入式编程的编程语言很感兴趣。特别是:
在C++中编写嵌入式系统是可能的吗?或者使用纯C更好?或者,只有当语言的某些特性(例如,C++、异常和模板)被排除在外时,它才是OK的?
这个领域的Java又如何呢?
谢谢。
发布于 2010-05-19 04:11:14
可以在C++中编写嵌入式系统吗?
是的,当然,即使在8位系统上也是如此。C++的运行时初始化要求与C略有不同,即在调用main()之前,必须调用任何静态对象的构造函数。这方面的开销(不包括在您控制范围内的构造函数本身)是很小的,尽管您必须小心,因为构造的顺序没有定义。
使用C++,您只需为所使用的内容付费(而且许多有用的内容可能是免费的)。也就是说,例如,一段也是C++可编译的C代码在编译为C++时通常不需要更多的内存,执行速度也不会比编译为C时慢。C++的一些元素可能需要小心使用,但大多数最有用的功能几乎没有成本,而且有很大的好处。
还是使用纯C更好?
有可能,在某些情况下。一些较小的8位甚至16位目标没有C++编译器(或者至少没有任何知名的编译器),如果这是一个问题,使用C代码将提供更好的可移植性。此外,在资源严重受限的小型应用程序目标上,C++比C带来的好处微乎其微。C++中的额外特性(主要是那些支持OOP的特性)使其适用于相对大型和复杂的软件构造。
还是C++只有在语言的某些特性(例如,RTTI、异常和模板)被排除的情况下才可以?
可以接受的语言特性完全取决于目标和应用程序。如果你是内存受限的,你可能会避免昂贵的特性或库,即使这样,也可能取决于你缺少的是代码还是数据空间(在目标上,它们是分开的)。如果应用程序是hard real-time,您应该避免那些不确定的特性和库类。
一般来说,我建议如果你的目标是32位,总是优先使用C++而不是C,然后削减你的C++以适应内存和性能的限制。对于较小的部件,在选择C++时要谨慎一点,尽管不要完全打折扣;它可以让生活变得更容易。
如果您选择使用C++,请确保您有良好的支持C++的调试器硬件/软件。在C++中构建复杂软件相对容易,这使得一个像样的调试器变得更有价值。并不是嵌入式领域中的所有工具都能识别或支持C++。
我总是建议在Embedded.com上挖掘任何嵌入式主题的档案,它有丰富的文章,包括一些仅此问题,包括:
关于Java,我不是专家,但它有显著的运行时要求,这使得它不适合资源受限的系统。您可能会将自己限制在使用Java的相对昂贵的硬件上。它主要优点是平台无关性,但可移植性不能扩展到不支持Java的平台(其中有很多),因此它的可移植性可以说比具有抽象硬件接口的设计良好的C或C++实现要低。
编辑顺便说一下,我刚刚在TechOnline时事通讯中收到了这篇文章:Using C++ Efficiently in Embedded Applications
发布于 2010-05-18 17:24:58
在嵌入式系统中,您所使用的编程语言通常由实际可用的编译器决定。
如果你的硬件只有一个C编译器,那就是你要用到的。如果它有一个不错的C++编译器,那么就没有理由比C++更喜欢C语言了。
我敢说,在嵌入式系统中,Java不是一个非常流行的选择。
发布于 2010-05-18 17:27:24
如今,嵌入式编程跨越了广泛的应用领域。
粗略地说,它从传感器/开关到完整的安全系统。
你应该把你的语言建立在复杂性和硬件资源的基础上。
它是硬件(CPU,...)、操作系统、协议、...
可能的选择:
python assembler
的组合
https://stackoverflow.com/questions/2855884
复制相似问题