您好、先生、
在使用 FR5949时,出于某种特殊原因,需要使用 FRAM >0x10000来存储客户数据。 同时,他们不希望在每次进入调试时都擦除这些数据,即使在首次编程时,也不需要将数据加载到地址>0x10000
您是否会告诉您如何在 IAR 中进行配置以实现此功能?
此致
徐学友
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.
您好、先生、
在使用 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页的"绝对位置的数据放置"
除了配置变量、您还需要确保正确设置存储器保护单元(MPU)、以允许对要使用的存储器区域进行读写访问。
此致、
Walter