您好!
目前我门做boot需要把程序中的局部地址全部变为全局地址,目前遇见一些问题,麻烦Andy或者各位高人指导一下。
我目前的理解是这样的:
1. platform文件(因为我们用了bios)、cfg文件、cmd文件均可以进行地址分配。并且优先级从高到低,因为我们很多时候在cmd文件中写地址分配都无效,而如果cfg文件的地址分配核paltform文件的地址分配冲突的话,编译链接过程中也会报错;
2. 由于每个platform文件中必须制定代码段 程序段 栈的地址,由于都是全局地址,所以每个核都必须使用不同的platform文件,但是新建paltform文件十分繁琐,不知道我们使用的方法是否正确。
3.有些时候, 我们在cfg文件盒cmd文件中都指出这个heap申请在全局地址中,比如tcp3d的heap(我目前没有去深究为什么要申请这个heap)写了Program.sectMap["tcp3DrvHeapSection"] = Program.platform.dataMemory 或者 "CORE1_L2SRAM ",但是这个heap始终都在局部L2SRAM中申请,程序不会编译到paltform设定的全局地址中,有时候写了 Program.sectMap[".main_men"] = "CORE1_L2SRAM ";(TCP3d为什么有个这个段)链接也还会报错,请问这种问题如何解决?
谢谢!
Alan
chen xie:
防止沉贴,自顶一楼!
Andy Yin1:
一般cmd中包含两部分,一部分是Memory用于对memory进行段划分,一部分是section用于指定数据或代码段放到特定的memory划分段里。
platform中是对应CMD中的memory工作,而cfg中可以嵌入section的功能,同时在cmd中还可以附件一个附属cmd文件对memory进行细分,以及将自定义的section放到相应的段里。
platform中LL2可以使用局部地址0x00800000,其他的地址都是全局的逻辑地址,可以多核共享一个platform,之后可以在cfg或者cmd中指定每个core的堆栈存放位置。
TCP3D在bios中没有一个module,也没有对应的heap之类要求。
对应platform、memory等可以再稍微看看sysBios user guide中的相关章节。