打印
[技术求助]

数组太大

[复制链接]
1744|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 | 只看该作者
呃。。。- -

使用特权

评论回复
5
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分配了一块空间,用来专门存放这几个数组:

使用特权

评论回复
6
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的运算结果存放数组

使用特权

评论回复
7
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

粉丝