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.

[参考译文] MSP430FR5949:如何将某些 FRAM 配置为 RAM、但在 IAR 中调试时不需要任何擦除/初始化

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/670017/msp430fr5949-how-to-configure-some-fram-as-ram-but-don-t-need-any-erase-initial-when-in-debug-in-iar

器件型号:MSP430FR5949

您好、先生、

在使用 FR5949时,出于某种特殊原因,需要使用 FRAM >0x10000来存储客户数据。 同时,他们不希望在每次进入调试时都擦除这些数据,即使在首次编程时,也不需要将数据加载到地址>0x10000

您是否会告诉您如何在 IAR 中进行配置以实现此功能?

此致

徐学友

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

    您好、Jacky、

    在这种情况下、您需要在声明变量的位置使用__no_init 编译器属性。  在 IAR 环境中、标准的默认链接器命令文件将_no_init 变量放入 SRAM。  您可以通过创建自定义链接器文件、使用指令#pragma LOCATION 或使用"@"运算符来强制工具链手动处理位。

    例如、假设您有一个要放置在 FRAM 中的无符号16位字的数组、并且您不希望在下载新程序时以及器件通过引导运行 CINIT 时将这些值初始化为任何值。  在 IAR 中实现该目标的最简单方法是像以下那样初始化数组:

    //! G_ui16DataBlock[256]
    //! 位于0x01800处 FRAM 信息存储器
    中的全局变量//! 未通过程序下载或启动 cinit 执行初始化
    //!
    _no_init uint16_t g_ui16DataBlock[256]@ 0x01800; 


    以下是供您使用的一些参考文档:

    《IAR Embedded Workbench MSP430编译器用户指南》
    请参阅当前版本235页的"绝对位置的数据放置"

    《MSP430 FRAM 技术指南》

    除了配置变量、您还需要确保正确设置存储器保护单元(MPU)、以允许对要使用的存储器区域进行读写访问。

    此致、
    Walter