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.
工具/软件:Code Composer Studio
我找不到这一点。
#pragma持久性按预期将全局变量放入FRAM。 这很好,但是如果我有一个本地256字节的阵列,最好能将它存储到FRAM而不是SRAM。 2kB SRAM的1/8就在那里。
据我所说,您只能将全局变量指派给FRAM, period。 这种情况是否有(sane)的解决方法? 显然,对于传统思维来说,使用一组全局变量是双倍加一种不好的,您必须维护某种命名方案等,以将特定的全局数组与特定函数绑定。 这也意味着您分配的内存比实际需要的要多,因为您总是在内存中保留“foo[256]"和“bar[256]",尽管它们可能不是同时需要的。
[quote user="Olli Mannisto",这仍然无法解决内存从未被取消分配的问题。 TI ARM,MSP430和C2000编译器支持C99 可变长度阵列 功能,该功能允许从堆中分配变量,并允许在超出范围时回收内存。
由于堆可以放置在FRAM中,这可能对您的情况有所帮助。
请注意,可变长度数组分配代码似乎不能确保线程安全,因此如果在SYS/BIOS程序中使用,可能会导致故障;请参见 MSP432P401R:当数组大小可变时,程序会出现硬故障。
我为MSP430FR5969创建了附加项目,该项目演示了可变长度阵列可以使用TI MSP430 v.16.2 .LTS编译器进行分配。 输出报告变量长度数组是在FRAM (堆的一部分)中的地址0x51f2处分配的:
以 字符串格式化的字符串格式化为字符 串的VLA格式化为长度为40的VLA 格式化为长度为50 (0x51f2)的VLA 格式化为长度为60 (0x51f2)的字符串格 式化为长度为70 (0x51f2 字符串)的VLA格式化的字符串 格式化为长度为80的VLA at 0x51f2 字符串格式化为长度为90 at 0x51f2的VLA
我注意到,对于小型内存设备,运行时库代码的大小开销很大,因为 <CCS_INSTALL_ROOT>\ccsv7\tools\compiler\ti-CGT-MSP430_VLA.1.LTS\lib\src\vla_alloc.cpp中的init_Curr_VLA_Pool()函数分配了一个初始3000字节缓冲区来管理16.9 存储池。 因此,必须将项目中的堆大小设置为4096字节,才能成功创建变量长度数组。