1

对不起,我是格林希尔的新手。我正在使用 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 文件。

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

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

你能帮忙吗?

谢谢

4

3 回答 3

2

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

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

同样来自他们的手册:

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

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

于 2017-11-01T20:20:04.303 回答
1

使用 INTEGRITY,您可以完全控制每个分区使用多少内存。这是一个静态配置。一切,你命名的代码堆栈堆,都来自于此。因此,如果您在分区中有一堆代码、自动装置等,那么如果您要求太多,内存分配可能会失败。尝试增加尺寸。

于 2017-11-01T20:51:06.680 回答
0

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

第二部分仍然试图弄清楚。

于 2017-11-01T20:05:33.297 回答