这个问题困扰了大概一周,源自需要写一份CMD文件语法规则的文档。
问题大致如下:
1.CMD文件中的PAGE0,PAGE1….PAGE n仅仅是方便程序员管理存储空间(在代码风格上),还是不同的page对应着不同的内存空间(比如page 0 对用着程序空间,page 1对应着数据空间)
以上两种解释我在不同的官方文档中都有看到,所以很纠结。
如果仅仅是代码风格上的分割,那么对于C2XLP内核器件和C55X系列器件又解释不过去,因为这两种器件的内存空间不是同一编址的,例如C2XLP的程序、数据、IO空间都是分开编址的。如果page仅是代码风格上的分割,而不代表不同的数据空间,那么图1中重叠的空间怎么解释,连接器怎么区分这两个重叠部分的代码,并将其放到对应的物理存储空间。
如果不同的page对应着不同的数据空间,那么我在28335(c28x)上的验证又不能支撑这一点假设,我将原来分配的PAGE0和PAGE1分别改成了PAGE3和PAGE5,并将PAGE0,PAGE1,PAGE2,PAGE4中没有分配任何数据块。编译通过后查看map文件,发现对应的段都分配到了对应的PAGE3和PAGE5。且代码运行正常。如果不同的page对应着不同的数据空间,那么PAGE3和PAGE5代表什么空间?为什么编译还能正常连接
Susan Yang:
不太了解其他的DSP芯片,关于C2000的话,您可以看一下
MEMORY {PAGE 0 :RAMM0: origin = ...RAML0L1 : origin = ...PAGE 1 :RAMM1: origin = ...RAML2: origin = ... }
每页内存完全独立。在页面之间,您可以重用内存范围名称和内存地址。以下示例完全合法,但是一般不建议这样
/* DO NOT DO THIS!!! */ MEMORY {PAGE 0 :MEM_RANGE : origin = 0x100, length = 0x100PAGE 1 :MEM_RANGE : origin = 0x100, length = 0x100 }