C ++内存分配使用Under Green Hills INTEGRITY

时间:2017-11-01 13:39:34

标签: c++ heap-memory rtos greenhills

对不起,我是格林希尔的新手。我使用的是MULTI 6.1.6,我选择的语言是C ++。

当尝试使用模拟器使用new来启动大于1M的类的对象时,我遇到了问题。

Class_Big* big_obj;
Class_Big = new Class_Big();
Class_Small* Small_obj;
Small_obj = new Class_Small();

如果sizeOf(Class_Big)> 1MB它从不调用类构造函数,返回NULL并转到下一条指令(Class_Small * Small_obj;)并正确创建下一个对象。如果我在Class_Big上找出一些变量来使其大小< 1MB代码工作正常,并创建对象。

我添加了两个

MemoryPoolSize="0x200000"
HeapSize="0x200000" 

到我的xml文件。

我在构建阶段遇到的另一个错误如果我使用lib有一个大类:

intex: error: Not enough RAM for request.
intex: fatal: Integrate failed.
Error: build failed

你能帮忙吗?

由于

3 个答案:

答案 0 :(得分:2)

要指定堆和内存池的内存大小,请在MULTI GUI中转到.int文件(扩展时可以在.gpj下拉列表中找到),然后双击它进行编辑。然后在紫色框内右键单击并转到"编辑"。转到"属性"选项卡,您可以将内存池大小和堆大小修改为更大。

或者您可以在文本编辑器中编辑.int文件,但如果您想使用gui来设置这些,请按照上述步骤操作。

同样来自他们的手册:

  

"检查正在使用的.bsp文件。用...声明的内存   MinimumAddress / MaximumAddress关键字必须与您的主板内存匹配。   如果没有,请根据需要修改这些关键字。如果是记忆   在.bsp文件中声明与主板匹配,你必须修改你的   应用程序使用更少的内存。"

此外,检查default.ld,您可以在那里设置RAM限制的值。查看__INTEGRITY_RamLimit以及那里的其他值。希望这有帮助!

答案 1 :(得分:1)

使用INTEGRITY,您可以完全控制每个分区使用的内存量。这是一个静态配置。你命名的所有代码堆栈都是由它来实现的。因此,如果您在分区中有一堆代码,自动代码等,那么如果您要求太多内存分配可能会失败。尝试增加大小。

答案 2 :(得分:0)

对于问题的第一部分基本上我应该修改" VirtualHeapSize"在.ld组件文件上。

第二部分仍然试图弄明白。