多核编程,使用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不太了解,
请问如何确定问题确实发生在这两个地方,或者需要看哪些文档或例程去学习这两个方面的配置呢?
谢谢!
TI中文支持网


