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.

[参考译文] CCS/MSP430FR5994:如何解决问题"数组太大"?

Guru**** 2589265 points
Other Parts Discussed in Thread: MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/813093/ccs-msp430fr5994-how-to-solve-the-problem-array-is-too-large

器件型号:MSP430FR5994

工具/软件:Code Composer Studio

大家好、我想在我的程序中定义一个 int32_t array[40000]、它将使用大约156KB 的内存。 我声明将此数据存储在 FRAM 中、其定义如下:

#if defined (__TI_Compiler_version__)
#pragma PERSISTENT (array)
#Elif defined (_IAR_systems_icc_)
_persistent
#endif
int32_t array[40000];

由于 FRAM 中有256KB 可用空间、我认为 FRAM 可以存储此阵列。 但是、当我使用 CCS 编译工程时、会出现错误"array is too large "。  

我应该如何解决这个问题?

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

    您好、Mingran、

    感谢您与我们联系。 我将开始处理这个问题。

    祝你一切顺利、

    Colin Adema

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

    您好、Mingran、

    要在 MSP430FR5994上的 FRAM 中创建一个大小相同的阵列、必须执行以下步骤:

    1) 1)初始化持久性阵列。 即、int32_t array[40000]={0};

    使用#pragma PERSISTENT 指令时、需要初始化变量。

    2) 2)在命令链接器文件中、.TI.persistent 字段位于从地址0x4000开始的 Read_write_memory 组下。 这是 FRAM 的起点、但 FRAM 被分成2个大约50k 和213k 的段(范围可在用户指南中找到)。 代码正在尝试将阵列放入第一个段中、这就是它不适合的原因。 您需要告知命令链接器文件允许您的数组进入两个段。 您可以通过移动.TI.persistent 行来实现这一点。

    如果命令链接器文件之前未经编辑、则.TI.persistent 行代码应位于第153行。 您想将其注释如下:

    之后、您需要将行移动到第180行以下、在空白大括号之后、您应该写入">FRAM2 | FRAM'来告诉代码使用 FRAM 的两个段、如下所示:

    3) 3)由于您已在_large_data_model_下添加了该模型、因此您需要在项目属性中启用大型数据模型。 由于所使用的阵列的大小、您需要大数据模型。

    您可以通过转到"Project properties"->"Build "->"MSP430 compiler"->"Processor"选项将数据模型更改为"Large "、并在下拉菜单中将数据存储器模型设置为"Large "。

    4) 4)现在、在属性的同一页中、您需要将 near 数据字段从全局变量设置为 none、以避免重定位地址中出现溢出。 如果没有此设置、您将无法访问地址超过16位的数组中的条目。

    步骤3和4在下图中完成:

    5) 5)最后、为了写入 FRAM、您需要禁用存储器保护单元(MPU)。 为此、您可以转到"Project Properties"->"General"->单击"MPU"选项卡->单击启用 MPU 的复选框以将其禁用。 下图显示了这种情况:

    完成这些步骤后、您应该能够在 FRAM 中创建阵列并对其进行修改。 如果您有任何疑问、请告诉我。

    祝你一切顺利、

    Colin Adema