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.

#pragma DATA_SECTION使用中出现的问题

请教:

        在C6678中使用#pragma DATA_SECTION时出现了两个问题:

         我们将一个大数组利用上述语句定义到MSMC上的一个段里,然而我们发现,在以下两种情况下,语句被无视,数组位置仍然处于L2上:

          1、当L2上空间足够时(根据实验,只有L2上空间不足它才会按data_section的说明去执行

          2、更严重的问题是,只要我为这个数组设定初值,如下所示:

          #data_section  ( a ,  "  .shareMem");

          float  a[16384] = {xxx};

          它似乎都会强制忽略掉前面的data_section,把数组放到L2上。如果L2不够就会报错。这一问题导致我们的一些重要功能无法使用。

          请问上述问题是出于什么原因导致?有没有解决办法?多谢?

  • 您好,能否做个复现工程贴上来看一下? 理论上DATA_SECTION会把变量放到指定的section。

  • 你好,

    是否正确定义? 我们TI的几十个客户都没有出现过这个状况。

    /////////////////////////////////////////////////////////////////////////////////////////////

    .c file

    #pragma DATA_SECTION(data_size,".shareMem")

    /////////////////////////////////////////////////////////////////////////////////////////////

    .cmd file

    SHARED_RAM: origin = 0x0C000000 length=0x003E0000

    .shareMem: type=NOINIT > SHARED_RAM

    /////////////////////////////////////////////////////////////////////////////////////////////

    Best Regards

    William

    William.dong@enea.com

  • 我用的C5402+外扩RAM(计64KW),可以定义一个大数组到外部RAM,共3k大小的数组,可以操作的.加个DAC,能画一个正弦波出来.  如图

  • 您好,这是一个很简单的工程,它精确地展示了第一个问题。

    工程main文件中将数组a定义到MSMC上,但事实上从map文件中很清楚地看到a实际上位于L2里

    第二个问题演示较复杂,如果您认为有必要我可以再做一个工程给您

    dataSectionTest.rar
  • Wang,

                您的工程没有定义一个.MSMCSRAM段,编译器也给出了告警:

    Description Resource Path Location Type
    #10247-D creating output section ".MSMCSRAM" without a SECTIONS specification dataSectionTest    C/C++ Problem

              在您的CMD文件中,定义了MSMCSRAM的memory, 接下来还需要定义一个段,将其指向MSMCSRAM。   

              建议您的代码更改如下:

            1   在CMD文件中,在section定义部分增加如下代码:

                   .msmcData     >    MSMCSRAM

         2     main.c 文件中,DATA_SECTION语句更改为:

                #pragma DATA_SECTION(a,".msmcData")

  • 至于您的第二个问题,原因在于您的CMD文件中,将cinit段指定到了L2, 这个段是用来放变量的初始化信息的。 这就是您的变量一旦赋初值,L2空间不够的话就会报警。

    .cinit      >       L2SRAM