Memory management PIC24F-即使在PIC断电后,数据值是否可能持续存在?

Memory management PIC24F-即使在PIC断电后,数据值是否可能持续存在?,memory-management,persistence,pic,persistent-storage,Memory Management,Persistence,Pic,Persistent Storage,我有一个关于PIC24F中数据值的持久性(存储)的问题,即使PIC已经关闭 我已经阅读了数据表,但对EEPROM和闪存的区别感到困惑 例如,假设我有一个变量“x”,有没有一种方法可以使“x”的值即使在PIC被关闭后仍然保持不变?我知道只要代码是在独立操作(COE_OFF)中编译的,程序就可以在闪存中保存。但是,我特别想知道数据值 如果我使程序存储器和数据值存储器不易失性,那么即使在电源关闭的情况下,它还会持续存在吗 是否需要将该值声明为“static”,例如:static int x 还是我错了

我有一个关于PIC24F中数据值的持久性(存储)的问题,即使PIC已经关闭

我已经阅读了数据表,但对EEPROM和闪存的区别感到困惑

例如,假设我有一个变量“x”,有没有一种方法可以使“x”的值即使在PIC被关闭后仍然保持不变?我知道只要代码是在独立操作(COE_OFF)中编译的,程序就可以在闪存中保存。但是,我特别想知道数据值

如果我使程序存储器和数据值存储器不易失性,那么即使在电源关闭的情况下,它还会持续存在吗

是否需要将该值声明为“static”,例如:static int x

还是我错了,即使在电源关闭后,数据值也无法保持


感谢您的帮助和澄清

电源关闭时,寄存器和RAM变量的内容丢失。闪存和EEPROM都是持久的。闪存只能在大数据块中擦除-128K及以上,具体取决于您的类型。EEPROM字可以单独读取或写入。如果您有EEPROM,这是保存少量数据的最佳选择。通常,您必须串行读取和写入EEPROM。

当电源关闭时,寄存器和RAM变量的内容将丢失。闪存和EEPROM都是持久的。闪存只能在大数据块中擦除-128K及以上,具体取决于您的类型。EEPROM字可以单独读取或写入。如果您有EEPROM,这是保存少量数据的最佳选择。通常,您必须连续读写EEPROM。

您必须使用TBLWTL和TBLWTH指令,以页形式写入闪存,正如您在设备数据表中所读的那样。这通常用于通过引导加载程序更新软件,但听起来这并不是您想要的

要访问EEPROM,您可以使用更小的单元,并且有编译器方便的宏,用于声明变量在内存映射中的位置。您可以指定变量存在于EEPROM中,编译器将为您生成访问和更新该变量的指令。您还可以使用编译器内部函数或TBL指令直接读取它

声明可能类似于:

unsigned __attribute__((space(eedata), aligned(2)) my_eeprom_variable;
查看生成的汇编器,了解当您访问变量时编译器会做什么


声明一个变量
static
只有传统的C语义;它控制变量的范围和初始化规则。

您必须使用TBLWTL和TBLWTH指令在页面中写入flash,正如您在设备数据表中所读的那样。这通常用于通过引导加载程序更新软件,但听起来这并不是您想要的

要访问EEPROM,您可以使用更小的单元,并且有编译器方便的宏,用于声明变量在内存映射中的位置。您可以指定变量存在于EEPROM中,编译器将为您生成访问和更新该变量的指令。您还可以使用编译器内部函数或TBL指令直接读取它

声明可能类似于:

unsigned __attribute__((space(eedata), aligned(2)) my_eeprom_variable;
查看生成的汇编器,了解当您访问变量时编译器会做什么


声明一个变量
static
只有传统的C语义;它控制变量的范围和初始化规则。

感谢您的回复

在其他一些建议之后,我再次阅读了MPLAB C30编译器数据表,并找到了“persistent”属性

根据数据表:

“persistent属性指定不应在启动时初始化或清除变量。具有persistent属性的变量可用于存储在设备重置后仍然有效的状态信息。”


我将尝试使用此功能,看看它是否有效。

谢谢您的回复

在其他一些建议之后,我再次阅读了MPLAB C30编译器数据表,并找到了“persistent”属性

根据数据表:

“persistent属性指定不应在启动时初始化或清除变量。具有persistent属性的变量可用于存储在设备重置后仍然有效的状态信息。”


我将试着使用它,看看它是否能工作。

一个PIC24在整个设备中最多有128k的闪存,而不是一个页面。页面大小为1.5KB(8行64条指令,每行3个字节)。PIC24在整个设备中最多有128k闪存,而不是一个页面。页面大小为1.5kBytes(8行64条指令,每个指令3个字节)。