目的是为了便于CCS工程的管理,想让一个CCS工程,相同的cfg配置和cmd(map)文件编译出的一个image能运行在多个DSP核,且数据、堆栈每个核私有。不想使用MAD工具,感觉满足不了一个CCS工程的条件。场景如下:
1. 4个核,运行4组不同的task,运行时用DNUM区分启动不同的task组
2. 想使用相同的配置,将私有数据映射到相同的一段ram,例如(0xa0000000 开始的64M),但实际4个核使用4段不同的物理地址。
3 代码段和共享数据直接使用实际的DDR3内存。
大概的方法是不是应该使用MPAX在程序加载到每个核之前将DDR3的一段物理地址映射为0xa0000000开始的虚拟地址,关键是数据加载前,load view变execute view之前完成映射。看了文档Multicore Shared Memory Controller,TMS320C66x DSP CorePac,还是不知道具体怎么操作,或者哪里有sample code,多谢!!
han yang1:
MAD 工具 支持prelink,就可以重映射物理地址,使得每个核访问的逻辑地址相同,实际对应不同的物理地址,不知道你为什么非要自己弄,
在部署文件里面添加
{ "name" : "ddr-data",
"vaddr" : "0xD0000000",
"paddr" : [ "0x801000000", "0x802000000", "0x803000000", "0x804000000", "0x805000000", "0x806000000", "0x807000000", "0x808000000" ],
"size" : "0x1000000",
"secNamePat" : ["systemHeap" ],
"cores" : [0,1,2,3,4,5,6,7],
"permissions" : ["UR", "UW", "SR", "SW"],
"cacheEnable" : true, "prefetch" : true,
"priority" : 0,
"shared" : false },
就可以了,
我们项目就是这么弄的,我建议你研究下MAD工具的使用,会用了,多核程序部署很简单,因为MAD都帮你做了。就算你自己解决了映射问题,还涉及到数据搬移到每个核,程序下载怎么弄等等。
tim cui:
回复 han yang1:
han yang1, 非常感谢你的建议。因为我们使用的6614有一个ARM运行linux,数据搬移到每个核,程序下载的这些问题,可以由linux完成。我主要是想一个CCS工程编译出来的.out文件可以直接运行于4个核,因为刚接触CCS/DSP开发,对很多工具比较陌生。
按照你上面的配置
"vaddr" : "0xD0000000",
"paddr" : [ "0x801000000", "0x802000000", "0x803000000", "0x804000000", "0x805000000", "0x806000000", "0x807000000", "0x808000000" ],
"size" : "0x1000000",
是不是在CCS link的时候map的段为0xD0000000开始的16M 地址空间(利用cmd 文件)。运行时发生地址重映射,每个核映射到不同的物理地址?
han yang1:
回复 tim cui:
不是在link.cmd里面修改,是改MAD工具里面的配置文件deployment_template_C6678_windows.json
在mcsdk_2_01_02_05\tools\boot_loader\mad-utils\map-tool\config-files 目录里面
如何使用MAD工具给你一个连接,有详细说明,
http://processors.wiki.ti.com/index.php/MAD_Utils_User_Guide
另外一个链接是开发包里面的一个多核例子
http://processors.wiki.ti.com/index.php/MCSDK_Image_Processing_Demonstration_Guide
我把我的这个配置文件给你参考
我的是6678,可能有些不一样。
tim cui:
回复 Andy Yin1:
谢谢你Andy,但如果将boot.c加入工程的话,将会出现link错误,错误信息如下:
<Linking>error #10056: symbol "_c_int00" redefined: first defined in "./platform/lib/bios/boot.obj"; redefined in "D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe 66>"error #10056: symbol "_stack" redefined: first defined in "./platform/lib/bios/boot.obj"; redefined in "D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe 66>"
请问如何让工程在link的时候不用"D:\ti\xdctools_3_23_03_53\packages\ti\targets\rts6000\lib\boot.ae66<boot.oe66>"这个库。
谢谢!!
zhonghong zhang:
回复 han yang1:
han yang1
您好,我刚刚接触DSP 多核开发,在做NAND FLASH 的自加载,现在单核的自加载可以完成,boot后可以从UART口看到输出的信息。现在需要做多核的启动,知道多核的实现有两种方法,一种就是利用hex6x工具将多个out合并并转换成bin然后烧写进去,但是单核自加载时,不需要转换工具,直接将out重命名为bin即可烧写,所以很纳闷,用转换工具是否最终可以实现,如果可以,是要做哪些改动?还有一种方法,需要用到MAD工具,我看到论坛里面有很多人的讨论,首先我需要安装哪些软件,您能给提供一个链接嘛?然后,MAD的操作步骤都有哪些呀,有没有6678开发板的demo呢?