我对 FRAM 读/写的使用感到困惑。 我读取代码演示和程序、只需如下所示定义一个数组:
#pragma PERSISTENT (FRAM_WRITE)
unsigned long FRAM_WRITE[WRITE_SIZE]={0};
数据将像这样写入 FRAM? 我如何知道它已写入 FRAM 而不是 RAM 或其他位置?
如果我想读取触发复位后存在的数据该怎么办? 您能向我推荐更多手册或演示吗?
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.
我对 FRAM 读/写的使用感到困惑。 我读取代码演示和程序、只需如下所示定义一个数组:
#pragma PERSISTENT (FRAM_WRITE)
unsigned long FRAM_WRITE[WRITE_SIZE]={0};
数据将像这样写入 FRAM? 我如何知道它已写入 FRAM 而不是 RAM 或其他位置?
如果我想读取触发复位后存在的数据该怎么办? 您能向我推荐更多手册或演示吗?
您好!
上面列出的命令仅用于 FRAM_WRITE 阵列初始化。 如果要写入数据、请参阅 MSP430FR6x8x 代码示例中的 msp430fr69xx_framwrite.c。
有关如何确认数据是否写入 FRAM 的信息,您可以使用 View->Memory Browser 来检查 FRAM_WRITE 数组数据,并查看其是否位于 FRAM 存储器空间中。
为了读取 FRAM_WRITE[]中存在的数据,可以直接定义一个变量,将 FRAM_WRITE 数据分配给该变量。 例如、
谢谢、
Lixin
非常感谢您的回复、Chen!!
实际上、我已经阅读了 damo msp430fr69xx_frewurite 和 MSP430FR6x8x 代码示例、我感到困惑的是、在程序 C 中没有 FRAM 的起始位置定义、而是在程序汇编语言中。 这是否意味着不需要使用 C 语言来定义起始位置 、它会每次直接将数据写入 FRAM、而不是 RAM 或其他地方?
此致
你好,陈,你的答案很清楚,非常感谢!
但是,如果我想在复位或上电后获取 FRAM 中已经存在的一些数据,该怎么办? 例如、我检测一些温度数据并将其保存到 FRAM 中、恐怕器件会意外断电。 因此、我想在开始时读取 FRAM 中的数据。 PRagram 如何实现此函数、它的工作方式是否如下:
(笑声)
unsigned long * fram_address = 0x80;
无符号长整型数据;
数据=* fram 地址;
(笑声)
还有其他更好的方法吗?
很抱歉、多次给您带来麻烦、我真诚地期待您的回复。
您好!
要读取保存到 FRAM 中的 FRAM 变量、就像读取在 RAM 中定义的正常变量一样。 我在上一帖子中展示了该示例。
有两种 FRAM 写入方法。 在以下代码示例中、我展示了对 FRAM 的写入和对 FRAM 的读取。
1.使用 persistent 内在函数。 编译器将为变量分配 FRAM 地址(请参阅文档 slau132)
//静态初始化变量
#ifdef __TI_Compiler_version__
#pragma PERSISTENT (Port_EVENT)
unsigned long data_FRAM = 0;
#Elif __IAR_systems_ICC__
__persistent unsigned long Port_event = 0;
其他
//将以下变量移植到所使用的特定编译器的等效持久功能
unsigned long Port_event = 0;
#endif
unsigned long read_FRAM、read_FRAM2;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止 WDT
P1OUT &=~BIT0;//清除 P1.0输出锁存器以实现定义的加电状态
P1DIR |= BIT0;//将 P1.0设置为输出方向 OUT
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
…
Read_FRAM = DATA_FRAM; //将数据从 DATA_FRAM 读取到 READ_FRAM
(笑声)
//触发 DATA_FRAM 写入的一些事件。 这里只是一个示例
DATA_FRAM = 0x989;
}
2.直接分配 FRAM 地址。 有关 FRAM 信息存储器和代码存储器地址空间、请查看数据表中的存储器映射。
#define WRITE_SIZE 128
unsigned long * FRAM_WRITE_ptr;
无符号长整型数据;
#define FRAM_TEST_START 0x1900
void FRAMWrite (void);
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
P1OUT &=~BIT0;//清除 P1.0输出锁存器以实现定义的加电状态
P1DIR |= BIT0;//将 P1.0设置为输出方向 OUT
PM5CTL0 &=~LOCKLPM5;//禁用 GPIO 上电默认高阻抗模式
READ_FRAM = FRAM_WRITE_PTR[0]; //读取 FRAM 数据进行检查
…
FRAM_WRITE_PTR =(unsigned long *) FRAM_TEST_START; //分配 FRAM 写入起始地址
数据+= 0x00010001;
FRAMWrite(); //为 WRITE_SIZE 写入 FRAM
(笑声)
}
空 FRAMWrite (空)
{
unsigned int i=0;
对于(i=0;i< write_size;i++)
{
*FRAM_WRITE_PTR++=数据;
}
}
谢谢、
Lixin