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.

[参考译文] 编译器/TMS320F2.8379万D:编译器对可变长度数组的支持

Guru**** 2595140 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/618973/compiler-tms320f28379d-compiler-support-for-variable-length-arrays

部件号:TMS320F2.8379万D

工具/软件:TI C/C++编译器

C28x C编译器是否支持可变长度数组,如果支持,有什么需要注意的?

例如,这...

void myFunc (uint16_t A)

   uINT16_t i;

   float32_t myArr[a];

 

   用于(i=0;i<a;i++)

   {

       myArr[i]= 0;

   }

}

 

主要()

   我的功能(10);

...在exit.c.中以无限循环结束  我使用C99和lre一些ANSI进行构建,sysmem的长度为0x400。   有什么想法吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的,TI编译器支持C99模式下的VLA。 它是通过使用动态分配来实现的,因此您可以检查.sysmem。 我看不到你发布的代码有什么问题,当我自己运行代码时,它运行良好。 也许您的程序需要更多0x400作为堆?

    您是否在CCS下运行此程序? 到达EXIT的程序的正常流程是EXIT呼叫中止,它具有无限循环。 CCS在此无限循环中在特殊标签处设置断点;如果不在该处设置断点,程序将执行无限循环。 运行程序时是否确定此断点仍存在? 在某些设置中,可能只有有限的断点数量。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Richard Poley 说:
    我使用C99和宽松的ANSI进行构建,sysmem的长度为0x400。[/QUOCE]\n运行 时库中的lib\src\vla_alloc.cpp源文件用于分配/取消分配可变长度数组。 在第一次尝试分配VLA 时,vla_alloc.cpp需要分配VLA存储池,从TI编译器v 16.9 5开始 ,该存储池需要1500字。

    因此,长度为0x400的系统不足以分配VLA存储池, 和exit()将在第一次尝试分配VLA时调用,因为 vla_alloc.cpp无法分配VLA存储池。即增加sysmem的大小,以便为VLA存储池和VLA阵列提供1500字的空间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    堆大小是问题所在。  非常感谢您的帮助。

    此致,

    Richard