This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

求教,如何让一个从未使用过的数组不被优化掉~

Other Parts Discussed in Thread: TMS320DM8148

各位好

          想把buf 放到一个内存段“Ram1” , 但是这个buf又没有在程序中¥直接¥引用,如何避免他被优化掉呢??

看到C6000编译器提供了

 #pragma  DATA_SECTION (buf,"Ram1")  //来指定存放位置

 #pragma  RETAIN(buf) //来保持buf始终被链接

int buf ; // 发现这样写buf 还是会被优化掉··

目前还尝试了 volatile 这样是不行的,另外不可以使用lock 方式放在固定地址。

可能大家看出来弄这个buf是为了占住空间,我需要认为这个buf所在的位置已经被分配,请给些意见,谢谢各位。

  • 在cmd里把这个内存空间空出来不行吗?

  • 谢谢

            我也是结合这种方式用的,但您的意思是,比如我定义4个数组分配空间 ,为了保证在空间上绝对分分配出来,需将A B C D 数组依次指向CMD中已经划好的四个内存空间吗???

    #pragma DATA_SECTION(A,"sectA")

    char A[X]

    #pragma DATA_SECTION(B,"sectB")

    char B[X]

    #pragma DATA_SECTION(C"sectC")

    char C[X]

          另外,咱们#pragma REMAIN 这个是不是有bug呀,我再-O3的选项中从来都没有试出他有用,我的测试方法是将A B C D 连续声明在某一块内存中,然后不使用B,直接打印A C地址 ,发现A C只间隔了一个数组的大小~ 麻烦啦

    问题背景信息:

    A.目前使用TMS320DM8148
    B.硬件环境基于8148的DVR产品
    C.软件环境基于DVRRDK3.5版本
    D.DSP核调试环境是CCS5.3
    产品已在迭代阶段

           

       

  • tony,你的邮箱是tony-tang@ti.com么?为啥我email发布过去嘞……

  • 是我没理解你的问题么?

    我试了没有问题啊:

    以代码中定义全局数组:
    #pragma DATA_SECTION(A_array,"sectA")
    char A_array[1000];
    #pragma DATA_SECTION(B_array,"sectB")
    char B_array[1000];
    #pragma DATA_SECTION(C_array, "sectC")
    char C_array[1000];

    在cmd文件中分配:

    SECTIONS
    {

     sectA  >  OCMCSRAM0
     sectB  >  OCMCSRAM0
     sectC  >  OCMCSRAM0

    ..............

    }

    加-o3选项编译,查看.map文件,都有分配的:

    SECTION ALLOCATION MAP

     output                                  attributes/
    section   page    origin      length       input sections
    --------  ----  ----------  ----------   ----------------
    sectA      0    40300000    000003e8     UNINITIALIZED
                      40300000    000003e8     main.obj (sectA)

    sectB      0    403003e8    000003e8     UNINITIALIZED
                      403003e8    000003e8     main.obj (sectB)

    sectC      0    403007d0    000003e8     UNINITIALIZED
                      403007d0    000003e8     main.obj (sectC)

     

     

     

  • Tony Tang 说:
    试了没有问题啊:

    多谢帮助 ^_^

             我发现在ccs编译一部分内容 ,和在linux中编译整个DVRRDK的时候有了差异,在CCS中不会引起这个问题,可能是编译选项的差异,但我没有对比出来。

             最后一个问题, 您知道有哪些可能将未使用buffer禁止分配的相关编译选项吗?或是别的可导致未使用buffer不分配的可能?