2013-02-22 64 views
1

即使在PIC關閉後,我也有關於PIC24F中數據值的持久性(存儲)的問題。PIC24F - 即使在PIC關閉電源後,數據值可能仍然存在?

我已閱讀數據表,但對EEPROM和閃存的區別感到困惑。

例如,假設我有一個變量「x」,有沒有辦法讓「x」的值在PIC關閉後仍然存在?只要代碼是在獨立操作(COE_OFF)中編譯的,我知道程序可以保存在閃存中。但是,我特別想知道數據值。

如果我使程序存儲器和數據值的存儲器非易失性,即使關閉電源,它是否仍然存在?

是否需要聲明該值爲「靜態」,例如:static int x; ?

還是我錯了,即使在關閉電源後數據值仍然沒有任何存儲方式?

感謝您的幫助和澄清!

回答

0

電源關閉時,寄存器和RAM變量的內容會丟失。閃存和EEPROM都是持久的。 Flash只能在大塊中擦除 - 128K或更高,具體取決於您擁有的類型。 EEPROM字可以單獨讀取或寫入。如果你有EEPROM,這是保存少量數據的最佳選擇。通常你必須連續讀寫EEPROM。

+0

PIC24在整個器件中將具有高達128k的閃存,而不是一個頁面。頁面大小爲1.5kBytes(8行64條指令,每個3字節)。 – janm 2013-02-22 03:39:58

1

您必須使用TBLWTL和TBLWTH指令以頁面形式寫入閃存,如您在設備的數據手冊中所閱讀的那樣。這通常用於通過引導加載程序更新軟件,而且聽起來並不像這是你所追求的。

要訪問EEPROM,您可以用更小的單位來完成它,並且有編譯器方便的宏來聲明變量應該在哪裏存儲映射。您可以指定變量位於EEPROM中,編譯器將生成用於訪問和更新的指令。您也可以使用編譯器內在函數或TBL指令直接讀取它。

聲明可能會是這個樣子:

unsigned __attribute__((space(eedata), aligned(2)) my_eeprom_variable; 

查看生成的彙編程序時看到您訪問變量編譯器做什麼。

聲明一個變量static只有傳統的C語義;它控制變量的範圍和初始化規則。

0

感謝您的回覆!

之後,我再次閱讀了MPLAB C30編譯器數據表,並找到了「persistent」屬性。

每數據表:

「的執着屬性指定變量不應被初始化或啓動時清除與持久屬性的變量可以用來存儲狀態信息設備復位後仍然有效。 「。

我會嘗試使用它來查看它是否會工作。

相關問題