你好:
我想在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都能正确的工作了。