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.
可以对 FRAM 进行分区吗? 也就是说、我想在 FRAM 变量中保存某些数据、这些变量的大小可能因情况而异、但我不希望 FRAM 的静态段应该更大或更小。
您好、Albert、
"动态"是指(1)在 MSP430FR5739上执行程序期间还是(2)在生产期间、您知道某些模型/器件需要较大或较小的 FRAM 区域?
遗憾的是、无法实现#1。 在应用程序构建的链接阶段、链接器命令文件允许链接器组合目标文件并将段分配到目标系统的配置存储器中。 链接器命令文件是一个 ASCII 文件、它使用两个链接器指令 MEMORY 和 SECTIONS 将段分配到存储器的特定区域中。 MEMORY 指令定义目标存储器配置。 SECTIONS 指令控制如何构建和分配段。 此外、链接器命令文件还可以包含输入文件名和链接器选项。 链接器命令文件在嵌入式程序中发挥着重要作用、因为它们指定了代码段和数据段在目标存储器中的分配位置。 如果没有此文件、链接器将不知道目标存储器配置以及如何正确分配段。
对于#2、这是可能的。 您只需使用两个(或更多)映像、这些映像使用不同的链接器文件为每个模型构建、等等
假设您是指情景1、这是为什么会引起关注的问题? 您的程序代码是否太大、以至于您的变量空间不足? 我建议在 FRAM 中声明一个足够大的段、以便容纳最大的可能变量、然后在整个代码中使用最大的可能变量。 否则、它会很快变得非常复杂。 例如、假设我们从32位变量更改为64位变量"动态"。 如果您执行的是32位乘法、加法等、则它不能与64位变量正常配合使用。 最大的可能变量提供向后兼容性、但需要更多内存。
希望这是有道理的。 如果我对您的问题产生误解、我会感到抱歉。 我建议查看我们的 MSP FRAM 最佳实践应用手册。
此致、
James
MSP 客户应用
您好、Albert、
我开始了解您的要求。 我主要关注编译时间、而您则讨论运行时间和可变长度数组。 考虑到这一点、请 查看 MSP430优化 C/C++编译器用户指南中的第6.1.4节"部分"和第6.1.6节"动态内存分配"。 ".sysmem "部分为动态内存分配保留空间。
此致、
James
MSP 客户应用
尊敬的 James:
再次感谢。 我认为您发送给我的内容仅针对 RAM 上的变量、不是吗?
.sysmem RAM
我需要的东西与变量不同、但与 FRAM 分区类似。 与静态定义我将用于 FRAM 变量的字节数不同、该数字应取决于写入程序时要存储的信息量、即在编译系统时将保留正确的字节数。 明白了吗?
[引用用户="Albert DelaO15">再次感谢您。 我认为您发送给我的内容仅针对 RAM 上的变量、不是吗?
是的、但请记住、FRAM 可用作 SRAM。 在 MSP430 FRAM 技术–操作方法和最佳实践 应用手册的表1中、您可以看到用于动态内存分配的".sysmem"段可以位于 FRAM 中。
[引用 user="Albert DelaO15">我不希望变量与 FRAM 分区类似。 与静态定义我将用于 FRAM 变量的字节数不同、该数字应取决于写入程序时要存储的信息量、即在编译系统时将保留正确的字节数。 有道理吗?[/引述]
对于静态存储器分配、使用栈。 对于动态内存分配、使用堆。 如果您的数组大小固定、编译器可以在栈上分配此确切大小。 由于数组大小可能会发生变化、编译器希望将其放置在堆上。 此外、正如我在上面提到的、在构建时间之后、无法更改存储器部分的大小。
Jens-Michael Gross 对以下主题中的分配和动态大小有一些好的建议。
此致、
James
MSP 客户应用