【发布时间】:2016-05-19 13:55:18
【问题描述】:
我想使用 MicroC OS-II 建立一个新的嵌入式项目并使用 C++。
当我想使用 new 运算符创建一个类的实例时,我的处理器遇到了一个异常,该异常似乎来自于 new 运算符中的 malloc 调用失败。这是一个失败的例子:
testC* test = new testC();
其中 testC 是具有整数成员变量的某个类。顺便说一句,我正在使用 Altera Nios 2。
经过一番研究,我得出的结论是 malloc 与 RTOS 不兼容。 因此我的问题是:是否可以将 C++ 与 uC/OS-II 一起使用?或者有没有办法替换新运营商中的 malloc 调用?
到目前为止,我找不到任何关于此的其他信息。
非常感谢您的帮助。 最好的, 罗马
【问题讨论】:
-
出于好奇,您为什么在嵌入式系统中使用
new?大多数嵌入式系统的内存有限且没有垃圾收集。如果要使用new,则必须解决碎片问题。 -
嗯,我想用 C++ 做一个 OO 系统。这就是我需要 new 运算符的原因,不是吗?我知道没有gc,但这是一般的C++还是我错了?
-
这样使用有意义还是我应该改变策略?
-
在嵌入式系统领域,一个常见的范例是更喜欢局部变量(堆栈)和静态变量(数组等)。目标是避免碎片化。
-
一般的 malloc() 实现并不是创建 OO C++ 应用程序的绝对需要:您可以 (1) 定义自己的一些内存池(具有各自大小的项目您的应用程序需要)和分配器类(如果需要) - 并使用placement-new 运算符而不是用于系统malloc 实现的vanilla 运算符(除非后者不存在......)。或者,(2)您可以设计一个不使用 new/delete 而是将所有对象创建为成员或堆栈变量的 OO 应用程序 - 并忍受由此产生的约束......