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**** 2577385 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/610490/ccs-msp430fr5969-fram-memory---replacing-array-with-pointers

器件型号:MSP430FR5969

工具/软件:Code Composer Studio

您好!

我们使用的是 MSP430FR5969。 在此过程中、我尝试将数据写入 FRAM 存储器。 当我在代码中使用数组时、它工作正常。 但是、当我用指针替换数组时、它不起作用、 并且在"Expression"选项卡中显示"Error: Attempted to read acast the end of memory at 0xFFFFFFFFF"、表示分配的指针变量。  

我的问题是、

1.我们是否可以使用指针将数据存储在 FRAM 存储器中?

2.如何用指针替换数组以将数据存储在 FRAM 位置?

如何设置段1和段2的边界?

4.如何增加 FRAM2的长度?

请查找以下样片、

pragma NOINIT (cret_value_array_3)
unsigned int cret_value_array_3[60];          //声明-这是我使用数组将变量分配给 FRAM 存储器的内容

pragma NOINIT (cret_value_array_3)
unsigned int *cret_value_array_3;              //声明-这是我使用指针替换数组的方法

那么、让我知道我的分配是否正确。 请回答上述问题。 谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)您可以使用指针将数据存储在 FRAM 中、但指针指向的内容必须在 MPU 中可写。 如果您使用 persistent 或(明显可见) NOINIT、链接器+启动将为您处理此问题。
    2) 2)在 C 语言中、"用指针替换数组"没有实际意义、因为它们是不同的-数组有60个项目、指针只有1个。 您可以创建指向数组的指针、但数组必须单独存在。 您可以初始化指针以指向数组("unsigned *ptr =&array[0];")、但在这种情况下、您需要使用 persistent 而不是 NOINIT。 您还可以在运行时分配指针("ptr =&array[0];");您的错误消息表示您没有这样做。
    还可以通过在 FRAM 中使用绝对地址("ptr =(unsigned *) 0x10000;")来创建"匿名"数组、但在这种情况下、您需要确定地址、确保没有其他地址在使用它们、然后自行重新编程 MPU; 这是危险和繁琐的、几乎不能推荐它来处理持久性变量。
    3) 3) FRAM1和 FRAM2被分离以提供中断向量、这些向量无法移动。
    4) 4) FRAM2进入(FRAM)存储器的末尾、因此对于给定的 MCU 器件、它无法扩展。