This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

如何在RTSC工程中的cfg配置文件中设置heap堆的大小?

Other Parts Discussed in Thread: SYSBIOS

6678

ccs 5.4

最近将一个FFmpeg的解码程序移植到6678上,但使用OpenMP例程的默认配置文件运行时会报错:

Illegal  opcode(00000002) at pc = 0x00196fc0

大概在网上查了一下可能是堆栈大小的问题,于是希望在cfg文件中进行修改:

Program.heap = 0x200000;
Program.sectMap[".heap"] = "DDR3";
Program.stack = 0x200000;
Program.sectMap[".stack"] = "DDR3";

修改后依旧报错,查看自动生成的cmd文件:

-heap 0x0
-stack 0x200000

栈的大小已经修改,但堆的依旧没有变。

如何设置堆的大小呢?还有cfg配置文件中对OMP的heap大小进行了设置:

HeapOMP.localHeapSize = 0x20000;
HeapOMP.sharedHeapSize = 0x1000000;

这个heap和cmd文件中设置的heap有什么联系?


  • 如sysBios user guide 6.7.2所述,heap分为system heap,以及自定义heap,使用时若未指定,则是默认使用system heap,所以应用可以根据需要对不同默认设定不同的heap。

    如手册所述,system heap size设置如下:

  • 谢谢Andy的回答!

    按照你说的方法我试了一下,但编译后会有warning:

    warning: ti.sysbios.BIOS: "D:/Program Files/ti/bios_6_33_05_46/packages/ti/sysbios/BIOS.xs", line 352: ti.sysbios.BIOS : BIOS.heapSize and Memory.defaultHeapInstance have both been set.  BIOS.heapSize ignored.  Using Memory.defaultHeapInstance.

    而且自动生成的cmd文件中heap的大小依旧没变,并且依旧运行时会报illegal opcode的warning:

    -heap 0x0

    另外我想问一下:

    1. OpenMP配置的heap和这个heap之间有什么关系么?
    2. invalid opcode的问题可能是其他原因吗?我的程序在改造之前是可以正常运行的,把其配置成RTSC工程后(因为要用OpenMP)就报了illegal opcode(0c094994) at pc = 0c047644的错误,查看反汇编窗口的出错语句发现在出错的地方的指令似乎被重新写了(因为我配置成RTSC工程之前的程序查看的结果是正常的指令):


  • Bios系统可以自定义多个heap,OpenMP heap应该就是自定义由OpenMP使用的heap。

    在load完程序之后这个地址的代码是正常么,每次运行后这个地址的代码都是被修改成这样么?如果是的话,可以用watchpoint或trace监视这个地址,看什么时候被变成这个value就把程序停下来。

    trace:http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/60514.aspx

  • 请问下,您胡问题解决了吗?我现在在项目中也遇上这个问题?
    解决了可以分享下解决方法吗?