如果我使用C ++语言编程编写嵌入式Linux系统的代码,是否存在重大问题?
实际上,我打算用arm-uclibc编译器将一些代码移植到arm linux上。
由于
答案 0 :(得分:6)
在我阅读你的问题时,我一直在考虑传统的嵌入式编程,直到我看到Linux部分。 C ++可用于嵌入式编程,隐藏构造函数等。如果你正在运行Linux,我怀疑你不必担心这些东西。
答案 1 :(得分:4)
您是在询问普通的C ++还是嵌入式C ++?据我所知,嵌入式C ++已经死了。您可以使用C ++编程,但是,根据您的要求,您可能希望避免使用某些构造。例如,如果没有太多空间,您可能希望尽可能避免模板(或显式实例化模板)以使模板实例化保持最小。您可能还希望避免异常或RTTI以减少生成的类型信息量(以节省空间),并避免必须处理异常安全(以将潜在的陷阱降至最低)以及异常传播的高成本(缩短最长的执行路径,用于实时系统)。虚函数应该没问题(它们不会引入那么多开销),但是如果你有非常严格的要求,你可能还需要限制它们的使用。如果你确实使用了异常,你也应该确保编译器支持它们(因为许多嵌入式系统的交叉编译器都没有)。
答案 2 :(得分:1)
移植大型软件可能会很麻烦。我有使用gcc c ++编程8位motorolla微控制器的经验,但在我的情况下,我从头开始,所以它更容易。我遇到的问题很少,例如使用析构函数停止执行程序,而不处理调用堆栈会导致它溢出其他程序变量......
所以,我在嵌入式设备上编写c ++代码的建议不是一次做很多改动。当你以小增量编程时,由于编译器或硬件错误,更容易发现某些东西停止工作。
答案 3 :(得分:1)
我认为在嵌入式系统中使用Linux比使用C ++更值得怀疑。从某种意义上说,这是一个更重要的决定,而不一定是一个坏主意。
嵌入式系统中与C ++相关的大多数问题都与代码大小和性能有关;许多问题都是基于神话,或者远不如你想象的那么重要,但即使在他们有一些理由的情况下,与运行Linux的开销以及Linux内核难以实现的实时性相比,它们显得微不足道。低延迟应用程序。
我经常在基于无操作系统和基于RTOS的系统上的嵌入式系统中使用C ++。使用Linux是合理的,其中实时确定性行为不,但提供的设备,文件系统和网络支持是有用的(尽管其他方面可以实现其中的大部分),和< / em>您的系统拥有大量资源;但如果没有令人信服的要求,它将永远是我的嵌入式系统操作系统选择列表中的最后一个。
如果您选择在没有MMU(例如ARM7或Cortex-M3)的ARM上使用uClinux,那么您将失去在第一个实例中使用Linux的重要令人信服的理由 - MMU保护的进程/内核。
答案 4 :(得分:-1)
是否存在重大问题?
如果我没弄错,arm-uclibc
是C编译器吗?