2011年3月18日 星期五

可讀寫任何資料的 EEPROM 函式

底下是一個 Arduino EEPROM Library 的使用範例,程式的邏輯是在 EEPROM 位址 5 的地方寫入數值 99,接著再從 EEPROM 讀出剛剛寫進去的內容:

EEPROM Library 只支援一個位元組(Byte)的讀寫,一次只能讀寫一個位元組。如果要儲存的資料只有一個位元組,這是足夠的。不過,假如是一個 int (2 bytes), long (4 bytes) 甚至是更複雜的資料結構,你就得呼叫 EEPROM Library 的函式很多次才能把資料儲存起來,這樣很不方便。

用底下提供的函式,你就可以讀寫 EEPROM 中的任何資料,而且函式只要呼叫一次就搞定。

下載 eeprom_anything

1) 下載 eeprom_anything.zip 並解壓縮到任意資料夾

2) 壓縮檔裏只有 eeprom_anything.h 和 eeprom_anything.pde 兩個檔案,把這兩個檔案放到你 Arduino 程式的資料夾底下,接著就可以開始使用了。

舉個例子,如果你想寫一支會用到 eeprom_anything 的函式的 struct_test 程式,如下圖所示,你就要把 eeprom_anything.h 跟 eeprom_anything.pde 複製到 struct_test 資料夾跟你的 struct_test.pde 放在一起:

image

eeprom_anything 的函式使用方法

eeprom_anything 的使用方法為:

1) 在程式開頭加一行 #include "eeprom_anything.h" 引用 eeprom_anything.h

2) 呼叫 EEPROM_readAnything() 來讀資料,呼叫 EEPROM_writeAnything() 寫資料:

  • EEPROM_readAnything(address, data) - 讀取 address 這個位址的內容,讀出來的資料會到 data 變數中。
  • EEPROM_writeAnything(address, value) - 把資料寫到 EEPROM,從 adrress 這個位址開始寫起。
範例

底下是一個範例程式(struc_test.zip):

這支程式定義了一個包含 long, int, float, char[] 等各種型別的 config_type 結構,然後在 eeprom_test() 函式裏面,程式利用 EEPROM_writeAnything(0, config) 把 config_type 結構的變數 config 的內容寫到 EEPROM,接著再定義一個新的 config_type 結構的變數 config_readback,並利用 EEPROM_readAnything(0, config_readback) 再從 EEPROM 裏把剛剛寫進去的資料讀取出來放到 config_readback 變數裏。兩個函式都是從 0 這個位址開始讀寫。

程式執行結果如下,從輸出結果可以看出,eeprom_anything 確實可以在 EEPROM 中讀寫任何資料:

image
▲ config_readback 變數的內容

延伸閱讀

0 意見: