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.

求助:c6678将.text段放入DDR或SL2中会使得程序无法正常运行



多核编程,使用IPC做核间通信,因为用到了emac需要一个很大的systemHeap,.cfg如下

var heapMemParams1 = new HeapMem.Params;
heapMemParams1.size = 8192 * 30;
heapMemParams1.sectionName = "systemHeap";
Program.global.heap0 = HeapMem.create(heapMemParams1);

使得l2空间不足不得不把.text段放到SL2或DDR中,.cfg代码如下

Program.sectMap[".text"] = "MSMCSRAM";
Program.sectMap[".const"] = "MSMCSRAM";
Program.sectMap[".qmss"] = "L2SRAM";
Program.sectMap[".cppi"] = "L2SRAM";
//new
Program.sectMap[".data"] = "MSMCSRAM";
Program.sectMap[".vecs"] = "L2SRAM";
Program.sectMap[".cio"] = "L2SRAM";
Program.sectMap[".sysmem"] = "MSMCSRAM";//
Program.sectMap[".stack"] = "L2SRAM";
Program.sectMap[".init_array"] = "L2SRAM"; //systemHeap
Program.sectMap["systemHeap"] = "L2SRAM"; //
Program.sectMap[".exram"] = "DDR3"; //
Program.sectMap[".msram"] = "MSMCSRAM"; //
Program.sectMap[".l2ram"] = "L2SRAM";

编译可以通过.map中:

MEMORY CONFIGURATION

name origin length used unused attr fill
---------------------- -------- --------- -------- -------- ---- --------
L2SRAM 00800000 00080000 000477f6 0003880a RW X
MSMCSRAM 0c000000 00400000 002957c8 0016a838 RW X
DDR3 80000000 20000000 0a1ac810 15e537f0 RWIX

但是运行后会出现很多问题包括:

明明调用了 一个函数在运行时却单步运行进入不了函数直接跳过,运行结果也完全不对

有时候执行到了那个函数,但是发现传递的参数完全不对,比如我传递的是8,函数内却是另一个数

有时候BIOS无法进入,中断也不能进入,还有很多类似的错误,请问我应该如何去解决?十分感谢!

  • 你有没有开O3优化,如果开了O3优化,单步调试的结果并不可信

    有没有对DDR3中的内容进行调整,若有,需要确保DDR3的初始化是正常的,

    可以先建个小系统,逐步往上面加功能,以此好做逐步排除

  • 您好,感谢您的回答,我按照您的建议进行了测试

    我没有开o3优化,函数确实不能正常运行,可能直接跳过,进一步测试发现向函数传递参数或者函数返回值会出现问题

    问题是发生在向单核工程添加IPC相关的代码之后,之前分开测试是没有问题的。

    具体出现问题的步骤就是在将.text段放到DDR上或者SL2上之后发生的,我怀疑多核程序不能直接这么做?

    DDR在分部分测试的时候没有问题,合并后偶尔会出现代码运行在SL2上后跳转到DDR上之后会发生取值错误。

  • 如果程序放在L2上跑没有,放在DDR和SL2上有问题,就有可能和memory映射和Cache这些配置有关

  • 您好!

    之前一直用的ti.platforms.evm6678平台库,所以对映射与cache不太了解,

    请问如何确定问题确实发生在这两个地方,或者需要看哪些文档或例程去学习这两个方面的配置呢?

    谢谢!