[技术求助] 数组太大

[复制链接]
2216|6
 楼主| robbins37 发表于 2012-10-29 16:13 | 显示全部楼层 |阅读模式
我的数据表太大了,似乎存不下

编译的时候提示

--------------------------  carrier64161.pjt - Debug  --------------------------

\"d:\\ti\\c6000\\cgtools\\bin\\cl6x\" -g -q -fr\"D:/ti/myprojects/carrier/carrier64161/Debug\" -d\"_debug\" -mv6400 -@\"Debug.lkf\" \"init.c\"



\"d:\\ti\\c6000\\cgtools\\bin\\cl6x\" -g -q -fr\"D:/ti/myprojects/carrier/carrier64161/Debug\" -d\"_debug\" -mv6400 -@\"Debug.lkf\" \"load.asm\"



\"d:\\ti\\c6000\\cgtools\\bin\\cl6x\" -g -q -fr\"D:/ti/myprojects/carrier/carrier64161/Debug\" -d\"_debug\" -mv6400 -@\"Debug.lkf\" \"main.c\"



\"d:\\ti\\c6000\\cgtools\\bin\\cl6x\" -g -q -fr\"D:/ti/myprojects/carrier/carrier64161/Debug\" -d\"_debug\" -mv6400 -@\"Debug.lkf\" \"start.asm\"



\"d:\\ti\\c6000\\cgtools\\bin\\cl6x\" -@\"Debug.lkf\"

>>   error: relocation value truncated at 0x60 in section .text, file

            D:\\ti\\myprojects\\carrier\\carrier64161\\Debug\\main.obj

>> warning: output file \'sine.out\' is not executable



Build Complete,

  1 Errors, 1 Warnings, 0 Remarks.



不知道怎么解决呢?

不知道把数组放在自定义段里面能不能解决这个问题?
dwananqinyan 发表于 2012-10-29 17:03 | 显示全部楼层
build options里面的memory models是怎么设置的?是near data 还是far data?
wrigleymint 发表于 2012-10-29 17:10 | 显示全部楼层
好像load的数组不能使用short型的

如果要load  short型的数组是不是把两个short合并成一个int?
qwempty 发表于 2012-10-29 17:29 | 显示全部楼层
呃。。。- -
icekoor 发表于 2014-8-21 16:18 | 显示全部楼层
本帖最后由 icekoor 于 2014-8-21 16:39 编辑

error message提示我的.text空间有问题(error: relocation value truncated at 0xa44 in section .text, file)
看到这个错误主要是我们在代码中定义的数组太大了,导致这个原因。解决办法:
在cmd中在SDRAM分配了一块空间,用来专门存放这几个数组:

icekoor 发表于 2014-8-22 09:25 | 显示全部楼层
-c
-stack 0x400
-heap  0x400
MEMORY
{
   ISRAM       : origin = 0x0,         len = 0x20000
   DSRAM       : origin = 0x20000,     len = 0x10000
   SDRAM       : origin = 0x80000000   len = 0x1000000
   DPRAM1      : origin = 0xB0001000   len = 0x0001000       /*将大数组分配到my_data1存储区(SDRAM)*/
   DPRAM2      : origin = 0xB0002000   len = 0x0001000       /*将大数组分配到my_data2存储区(SDRAM)*/
   DPRAM3      : origin = 0xB0003000   len = 0x0001000       /*将大数组分配到my_data3存储区(SDRAM)*/
}

SECTIONS
{
        .vec            > ISRAM
        .text           > ISRAM
        .data           > DSRAM
        .bss            > DSRAM
        .cinit          > DSRAM
        .const          > DSRAM
        .far            > DSRAM
        .stack          > DSRAM
        .cio            > DSRAM
        .sysmem         > DSRAM
        .my_data1       > DPRAM1  
        .my_data2       > DPRAM2
        .my_data3       > DPRAM3
}
//----------------------------------------------------------
//混合基数FFT变量声明
//----------------------------------------------------------
#pragma DATA_SECTION(ResultFFT2, ".my_data1")   //将数组分配到my_data1存储区(SDRAM)
#pragma DATA_SECTION(Source2,    ".my_data2")   //将数组分配到my_data2存储区(SDRAM)
#pragma DATA_SECTION(Result2,    ".my_data3")   //将数组分配到my_data3存储区(SDRAM)

float   ResultFFT2[Nh];      //定义FFT输出的幅值
struct  Compx Source2[Nh];   //定义FFT的采样点存放数组
struct  Compx Result2[Nh];   //定义FFT的运算结果存放数组
icekoor 发表于 2014-8-22 09:27 | 显示全部楼层
DPRAM1      : origin = 0xB0001000   len = 0x0001000       /*将大数组分配到my_data1存储区(SDRAM)*/
注意后面的注释要为/*  */,使用//会有问题。
#pragma DATA_SECTION(ResultFFT2, ".my_data1")   //将数组分配到my_data1存储区(SDRAM)
注意是.my_data1而不是my_data1。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

160

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部