c++ on bare board嵌入式系统

C++ on bare board Embedded System

本文关键字:嵌入式 系统 board bare on c++      更新时间:2023-10-16

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

c++库需要环境才能正常运行吗?如果我这样做,我可能遇到的问题。

    c++的OOP模型需要专门的内存管理系统。[新建,删除,智能指针]
  1. c++的异常处理,在我看来,这是一种神话。据我所知,WinCE的c++异常处理需要arm core/Kernel的支持。
  2. 其他功能,如运行时类型信息

你能和我分享一些经验吗?非常感谢。

这取决于您的库,但在嵌入式平台上,您通常会关闭rtti和异常处理。c++通常需要一个内存分配器,并且通常用malloc实现。如果是其他类型,则必须提供默认的overator new和operator delete实现。

从你的问题来看,不清楚你是否尝试移植(即重写c++程序到C)或只是在嵌入式环境中运行c++程序,因此(几乎)不改变它。在第一种情况下,你应该动动脑子。没有任何麻烦(除了花费很长时间…)在第二种情况下,这也不容易。要考虑的事情(我假设您使用gnu工具链或从它派生的,如果没有-我只是不知道事情是如何存在的)

  • 你有一个加载器可以做到这一点吗?也就是说,模板符号应该以一种特殊的方式处理(它们是弱的),但只有当你使用一些动态库时,它才会困扰你。你的加载器应该能够调用全局构造函数和析构函数。异常展开信息的加载也应该由它来处理。可以看一下: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。