TI中文支持网
TI专业的中文技术问题搜集分享网站

求助: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无法进入,中断也不能进入,还有很多类似的错误,请问我应该如何去解决?十分感谢!

Thomas Yang1:

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

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

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

xu kuang:

回复 Thomas Yang1:

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

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

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

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

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

Thomas Yang1:

回复 xu kuang:

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

xu kuang:

回复 Thomas Yang1:

您好!

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

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

谢谢!

赞(0)
未经允许不得转载:TI中文支持网 » 求助:c6678将.text段放入DDR或SL2中会使得程序无法正常运行
分享到: 更多 (0)