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平台下开发一个应用,使用SYS/BIOS。在应用中,所有核上的程序是完全一样的,非共享的全局变量也一样(名字一样,但在内存中位于不同的位置)。我想把.text,.data,.bbs等段都放到DDR3中,而不是像很多例子那样放到别名(aliased)L2RAM中。我是否可以像下面这样就能达到自己的目的:

1. 在自己定义的平台中,将DDR3空间分成若干个段,其中有共享的段,也有非共享的段。例如定义:

SHAREDDR为共享的DDR3空间

CORE0DDR为CORE0的私有DDR3空间,

CORE1DDR为CORE1的私有DDR3空间,等等。

不同的COREnDDR在DDR3中占用不同的地址空间。

2. 为每一个CORE都创建一个工程,工程中所有的代码都一样。只有app.cfg不完全一样。在app.cfg中为每个工程映射不同的内存空间。例如COREn的app.cfg中添加如下:

Program.sectMap[".text"] = new Program.SectionSpec();
Program.sectMap[".text"].loadSegment = "SHAREDDR";
Program.sectMap[".bbs"] = new Program.SectionSpec();
Program.sectMap[".bbs"].loadSegment = "COREnDDR";
Program.sectMap[".data"] = new Program.SectionSpec();
Program.sectMap[".data"].loadSegment = "COREnDDR";

等等。

这样,我所有的程序段都在SHAREDDR中,而每个core上的数据段,bbs段等都在COREnDDR中,从而每个core的非共享全局变量等都放到了各自私有的DDR3空间。

然后把所有8个CORE对应的8个工程都进行编译,并连接成8个app.out。最后,使用多核BOOT相关的技术把这些.out统一烧写到FLASH中就可以了。

我还想知道,是否有更简单的办法,是否有只需创建一个统一的工程,然后就能编出8个cores的8个不同的.out文件的办法。

另外,我还想了解一下,类似EDMA3这样的共享资源在多核上的资源管理的问题。是否只要在每个核上调用相关的资源管理接口,就能由框架接口完成这样的管理工作?例如,是否只要在每个core上使用EdmaMgr_alloc()分配EDMA3资源,就能使得每个核上的EDMA3都能正确的工作了。

  • 我的话会这样干:
    多核加载自己的二级bootloader,bootloader里每个核做自己的地址映射(所有核的镜像的链接地址都是一样的,L2是自己的放私有高速数据,MSMC可以发放共享的和告诉需求的数据,DDR每个核映射到自己的物理地址,const段再你的模式下可以映射到同一物理地址),然后加载镜像,然后下一个核再如此,
    关于如何指定自定义段,看看link cmd文件的写法,ti pdk里面也有可以参考的。
  • 多谢了。

    我当前也是这样做的,只是每个核都要搞一个工程,都要编译链接一次,挺不方便的。

  • 你的所有核的代码一样的,不用一样的代码编译多分呀,加载地址在不同核映射为不同的物理地址就行了呀。