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/MSP430FR5969:如何将变量放入 FRAM 中

Guru**** 1737970 points
Other Parts Discussed in Thread: HDC2010METER-EVM, HDC2010, MSP430FR5969
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/895470/ccs-msp430fr5969-how-to-put-variables-into-fram

器件型号:MSP430FR5969
主题中讨论的其他器件:HDC2010METER-EVMHDC2010

工具/软件:Code Composer Studio

您好!

该器件具有2kB 的 RAM、但这还不足以满足我的需求。 我想使用64KB 的 FRAM。 然而,事实证明,这是一个相当大的挑战。

首先、我运行的是 CCS 版本:10.0.00010

我应该为 MSP 下载并安装 CCS 吗?

目标硬件是 HDC2010METER-EVM

我正在使用 MSP‑EXP430FR5994评估板的 eZ-FET 部分对目标进行编程。

 HDC2010METER-EVM 运行演示程序、提供板载传感器(HDC2010)每2秒更新一次的温度和湿度测量(显示在 LCD 上)。

我将向提供的演示代码中添加一项功能、该功能可计算两次测量的5分钟移动平均值。

这需要一个2-D 数组:150个测量 x 每个测量8个字符字节。

两个阵列、一个用于温度、一个用于湿度:

char Stmp_arr[150][8];

char shm_arr[150][8];

 学习了 slaa628、MSP430TmFRAM 技术–操作方法和最佳实践以及 MSP430FR5969的数据表后,我得出的结论是,我必须修改链接器命令文件(lnk_msp430fr5969.cmd):

//.bss    :{}> RAM /*全局和静态变量*/
//.data   :{}> RAM /*全局和静态变量*/
.bss    :{}> FRAM /*全局和静态变量*/
.data   :{}> FRAM /*全局和静态变量*/
.TI.noinit:{}>RAM /* for #pragma noinit */
.stack   :{}> RAM (高)/*软件系统堆栈*/
.TI.persistent:{}> FRAM /* for #pragma PERSISTENT */

我将段.bss 和.data 重新分配到 FRAM (用蓝色突出显示)。 我还添加了以绿色突出显示的行。

我还进入了项目属性、启用了 MPU、并选中以手动指定内存段和权限-为自己提供了所有权限。

无论我做什么、阵列变量始终从0x001F26开始、该值仍然是 RAM。

有什么想法吗?

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

    您是否尝试过这样的操作?

    #pragma PERSISTENT (Stmp_arr)
    char Stmp_arr[150][8]; 

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

    是的、我已经按照您的建议尝试了#pragma 指令。 遗憾的是、没有变化。

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

    我明白了。

    我在 main 下具有局部指令和变量声明。

    #pragma PERSISTENT(stmp_arr)
    charstmp_arr[150][8];
    然后、我将指令移到 main 之外(范围中为全局)。
    这不起作用、因为它找不到局部变量。
    因此、我将这两行代码都放在 main 之外。 这就是诀窍。 不同之处在于、我必须显式初始化变量。
    谢谢!