您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 技术讨论区 -> [求助]21375的LDF设置问题
本帖共有2390个阅读者
发表帖子 发表投票 回复主题
[求助]21375的LDF设置问题
六月雪(论坛新手)
六月雪
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:135
积分:5
注册时间:2011/6/8
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助]21375的LDF设置问题
急,我在用21375,有一个LDF问题想请教。

如果*.LDF中有定义(如附件LDF文件)

       seg_sdram_pm { TYPE(PM RAM) START(0x00200000) END(0x0022FFFF) WIDTH(16) }

       (略)--

         seg_sdram_pm

        {

     INPUT_SECTIONS( $OBJECTS(seg_pmco) $LIBRARIES(seg_pmco))

            INPUT_SECTIONS( $OBJECTS(seg_dmda) $LIBRARIES(seg_dmda))

            INPUT_SECTIONS( $OBJECTS(seg_pmda) $LIBRARIES(seg_pmda))

        } > seg_sdram_pm

      (略)--

那下面的代码是不是就是指定在SDRAM中?

      

section("seg_sdram_pm")

void Gain_Render(float *in,float *out,float amp,int tickSize)

{

    int i;

    for (i=0; i<tickSize; i++) {

        out[i] = in[i] * amp;

    }

}

但是我这样去做的话,编译时,就出现下面的错误:

[Warning li2060]  The following input section(s) that contain program code

        and/or data have not been placed into the executable for processor 'P0'

        as there are no relevant commands specified in the LDF:

        .\Debug\Gain.doj(seg_sdram_pm)

[Error li1060]  The following symbols are referenced, but not mapped:

        '_Gain_Render' referenced from .\Debug\InitAudio.doj(seg_pmco)

请帮忙分析一下,ADI的这个LDF搞得太复杂了!

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/8 23:15:19
尊贵身份标志
steve(论坛版主)
steve
头衔:社区公民
帮派:无帮无派
帖数:12
金钱:160
积分:12
注册时间:2011/6/8
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

1.       section("seg_sdram_pm")  映射的名字没有错,你也可以通过图形方式打开,查看左边的空间映射名称中有没有要使用的空间。

2.       之所以会报错,我觉得是你映射的空间中缺少定义了某些功能,下面是我从VDSP自动生成的LDF文件里复制出的一段关于SDRAM空间映射的描述,你试试用以下功能定义可否用。

3.       你也可以直接复制系统生成的LDF文件里的代码,然后改一下映射的名称和空间起始地址即可。建议不要过多的修改LDF文件。

        seg_sdram_data
        {
          //reserve memory for heap/stack if we need it
#if defined(USE_SDRAM_STACK) && defined(USE_SDRAM_HEAP)
            RESERVE(stack_and_heap, stack_and_heap_length = STACKHEAP_SIZE)
#elif defined(USE_SDRAM_STACK)
            RESERVE(stack_and_heap, stack_and_heap_length = STACK_SIZE)
#elif defined(USE_SDRAM_HEAP)
            RESERVE(stack_and_heap, stack_and_heap_length = HEAP_SIZE)
#endif // USE_SDRAM_STACK && USE_SDRAM_HEAP
            //try and place anything else out into SDRAM
            INPUT_SECTIONS( $OBJECTS(seg_dmda) $LIBRARIES(seg_dmda))
            INPUT_SECTIONS( $OBJECTS(seg_ext_data) $LIBRARIES(seg_ext_data))
            INPUT_SECTIONS( $OBJECTS(seg_sdram) $LIBRARIES(seg_sdram))
        } > seg_ext_dmda


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/9 9:19:04
尊贵身份标志
steve(论坛版主)
steve
头衔:社区公民
帮派:无帮无派
帖数:12
金钱:160
积分:12
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

如果还没解决的话,你可以把你的ldf发给我看一下,站内邮箱


这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2011/6/9 9:20:02
六月雪(论坛新手)
六月雪
头衔:社区公民
帮派:无帮无派
帖数:4
金钱:135
积分:5
注册时间:2011/6/8
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

改好的ldf收到了,问题解决了,很感谢。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2011/6/9 17:14:09
yinchao163(论坛新手)
yinchao163
头衔:社区公民
帮派:无帮无派
帖数:1
金钱:105
积分:1
注册时间:2017/3/3
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

本人也是遇到了一模一样的问题,现在已经解决。

背景:程序开发时,由于算法占用了大量内存资源,导致溢出,需要把不常用的数组分配到external memory上去

平台:21489+CCES2.1

错误提示:同上

解决方案:

1.在项目工程中点击system.svc,在overview视图窗口中确认已经add-in了startup code/LDF了。

2. 打开LDF的编辑对话框(下面的overview切换到下一个)

3. 在LDF选项卡中勾选 use external memory,直接保存。这个时候系统会自动生成新的LDF(可以对比两个文件的区别)

4. 在生成的LDF文件中找到你想把数据存入的空间,比如mem_sdram_dmda,搜索mem_sdram_dmda在下文中的定义,可以找到一堆东西

dxe_sdram_data

{

    EXCUTABLE_NAME()....

...(省略)

} > mem_sdram_dma

5. 拷贝dxe_sdram_data这个名字(映射地址名)

6. 在代码段中,任意想要指定分配空间的数组前声明地址就好了

例如:

section("dxe_sdram_data")

long test[1000000];


ps:如果你这个数组能够编译通过,就说明配置正确了。显然internal memory是无法存储这么大的数组的。


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2017/3/3 11:10:31
21489LAD(论坛新手)
21489LAD
头衔:社区公民
帮派:无帮无派
帖数:8
金钱:140
积分:6
注册时间:2018/4/11
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
mark,论坛里真是有很多有用的问答啊,解惑了。

「该帖子被 21489LAD 在 2018-04-16 17:41:26 编辑过」

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2018/4/16 17:41:03
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154134 Call, 1 Queries, Processed in 0.031250 second(s),