CMD文件中先指定各个段的位置,例如我们想把数组a放在evm6678l的DDR3中,通过查询手册可知,DDR3的起始地址在0x80000000处:
因此才CMD文件中加:
-c
-heap 0x41000
-stack 0xa000
/* Memory Map */
MEMORY
{
L1PSRAM (RWX) : org = 0x0E00000, len = 0x7FFF
L1DSRAM (RWX) : org = 0x0F00000, len = 0x7FFF
L2SRAM (RWX) : org = 0x0800000, len = 0x080000
MSMCSRAM (RWX) : org = 0xc000000, len = 0x200000
DDR3 (RWX) : org = 0x80000000,len = 0x10000000
}
SECTIONS
{
.csl_vect > MSMCSRAM
.text > MSMCSRAM
GROUP (NEAR_DP)
{
.neardata
.rodata
.bss
} load > MSMCSRAM
.stack > MSMCSRAM
.cinit > MSMCSRAM
.cio > MSMCSRAM
.const > MSMCSRAM
.data > MSMCSRAM
.switch > MSMCSRAM
.sysmem > MSMCSRAM
.far > MSMCSRAM
.testMem > MSMCSRAM
.fardata > MSMCSRAM
platform_lib > MSMCSRAM
.a > DDR3
}
heap和stack尽量设置大一点,否则如果用fopen打开文件指针会溢出。
CMD的最后一行分配a字段是在DDR3处,现在在main.c文件中指定我们数组a的位置:
这两行代码在main.c的最开始处写上,说明定义的数组a是在定义在DDR3中的。接下来是生成我们需要加载的数据,CCS默认的数据格式是.dat。因此我们创建一个dat文件写入:
对第一行进行解释:
CCS数据文件文件头格式:
文件类型 数据类型 起始地址 数据页号 数据长度
文件类型:固定为16510;
数据类型:取值1-4,对应类型为:十六进制、整数、长整数和浮点数;
起始地址:十六进制,数据存放的内存缓冲区首地址;
数据页号:十六进制,指明数据取自哪个数据页;1代表是数据,0代表是程序
数据长度:十六进制,指明数据块长度,以WORD为单位。
这里我们文件类型是1651,数据类型是浮点数因此是4,起始地址在DDR3的首地址,因此用16进制表示就是80000000,数据页号我们默认写为1,表示存放的是数据;长度就是有多少个数,这里为10个,写为16进制就是A。
DEBUG下:选择load memory
勾选使用头文件信息设置起始地址与数据长度。
finish后在Memory Browser输入0X80000000就可以看见存储的第一个数据,可以根据不同的格式进行显示