c++ on bare board嵌入式系统
C++ on bare board Embedded System
我正在尝试在我们的嵌入式系统上移植一个用c++编写的库。嵌入式系统是在ARM平台上用C语言编写的。我一直在想我有可能做到这一点。c++编程语言比C语言复杂得多。
c++库需要环境才能正常运行吗?如果我这样做,我可能遇到的问题。
- c++的OOP模型需要专门的内存管理系统。[新建,删除,智能指针]
- c++的异常处理,在我看来,这是一种神话。据我所知,WinCE的c++异常处理需要arm core/Kernel的支持。
- 其他功能,如运行时类型信息
你能和我分享一些经验吗?非常感谢。
这取决于您的库,但在嵌入式平台上,您通常会关闭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。
相关文章:
- 为什么开发人员将C / C ++用于嵌入式系统,而不是像Python这样的高级语言与C相比?
- 带有参数的嵌入式系统上的最小c++回调
- 在嵌入式系统中读取文件的内存碎片
- 为嵌入式系统加载 png 图像
- POCO C++嵌入式系统中的框架库使用
- 嵌入式系统中未显示的中文字符(yocto,Qt 5.5.1) - 为什么Qt不使用系统字体?
- 如何在嵌入式系统中使用OpenCV
- 面向嵌入式系统的独立于硬件C++ HAL
- 运行Yocto的嵌入式系统的唯一ID
- 如何将阵列指向嵌入式系统上的某个特定内存地址
- 用于嵌入式系统的C++数据容器
- 可以将Statechart库与粒子光子嵌入式系统一起使用
- 最佳C 11测量嵌入式系统代码执行时间的方法
- 为嵌入式系统构建QT时错误
- 我可以用Visual Studio 2015为Windows嵌入式系统(WinCE 6.0,WES7)构建C++应用程序
- 正确处理字节对齐问题 - 通过UDP在16位嵌入式系统和32位桌面之间
- 嵌入式系统上的C++动态代码注入
- 简化嵌入式系统中的位(引脚)操作
- C++嵌入式系统摩尔斯电码
- 在嵌入式系统上从DOS切换到Linux