裸机嵌入式系统上的C ++

时间:2016-08-14 08:47:42

标签: c++ arm rtos

我正在尝试在我们的嵌入式系统上移植用C ++编写的库。嵌入式系统在ARM平台上用C编程语言编写。我一直以为我有可能做到这一点。 C ++编程语言比C语言复杂得多。

C ++库是否要求环境正常运行?如果我这样做,我可能遇到的问题。

  1. C ++的OOP模型需要特殊的内存管理系统。[new,delete,smart pointers]
  2. C ++的异常处理,在我看来,这是一种神话。据我所知,WinCE的C ++异常处理需要ARM-core / Kernel的支持。
  3. 其他功能,例如运行时类型信息
  4. 请与我分享一些经验。非常感谢你。

2 个答案:

答案 0 :(得分:1)

很多取决于您的库,但在嵌入式平台上,您通常会关闭rtti和异常处理。 C ++通常需要内存分配器,通常用malloc实现。如果是其他内容,您将无法提供默认的overator new和operator delete实现。编译器将负责其余的工作。

答案 1 :(得分:0)

从您的问题来看,目前还不清楚您是否尝试移植(即将C ++程序重写为C语言)或仅在嵌入式环境中运行C ++程序,因此(几乎)不会对其进行更改。在#1的情况下,你应该使用你的想法。那里没有任何麻烦(除非需要很长时间......)如果是#2,它也不会那么容易。要考虑的事情(我会假设你使用gnu工具链或从中衍生出来,如果没有 - 我只是不知道那里有什么东西)

  • 你有装载机可以做到这一点吗?那就是模板符号应该以特殊的方式处理(它们很弱),但只有你使用一些dylds(动态库)才会打扰你。您的加载器应该能够调用全局构造函数和析构函数。加载异常展开信息也应该由它来处理。需要注意的一点是:https://refspecs.linuxfoundation.org/LSB_3.0.0/LSB-PDA/LSB-PDA/ehframechpt.html
  • 您需要C ++运行时。即语言的基础支持,我建议在这里作为一个起点:https://github.com/gcc-mirror/gcc/tree/master/libstdc++-v3/libsupc++ 考虑到这一点也意味着使用malloc / free函数,类似于mmap。
  • 如果您的程序使用线程,TLS(线程本地存储,thread_local c ++关键字),文件处理和异常,复杂性会大大增加......我希望您希望通过移植或使用完整版本来祝你好运stdlibc ++(g ++)或libc ++(clang)
  • 只需要考虑的一点就是你需要glibc或者像https://www.uclibc.org/这样的微替换。如果你使用一些非标准的替换它值得考虑如何将它加入上面的c ++库(stdlibc ++或libc ++,或理论上可能使用的其他东西)

关于上述这些事情的思考我决定,对于我自己的小型裸金属臂项目,c ++太多了,Force就在C中。

相关问题