Ya, Anda dapat secara manual menulis data default ke EEPROM dalam kode sumber. Pertama, lihat panduan luar biasa ini pada EEPROM dengan AVR: Tutorial AVR EEPROM dari Dean. Juga, saya harus menambahkan bahwa itu adalah ide yang lebih baik untuk membuat file .eep yang berisi data EEPROM menggunakan makefile yang akan diprogram ke perangkat bersama dengan kode sumber. Namun, jika Anda tidak terbiasa dengan berbagai operasi makefile dan linker, itu masih dapat dilakukan dari dalam file kode sumber Anda - itu hanya akan terjadi segera setelah rangkaian diaktifkan, menghentikan operasi program awal.
Di awal program (sebelum loop utama), Anda dapat melakukan sesuatu seperti ini:
#include <avr/eeprom.h>
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_2 52 // This could be anything from 0 to the highest EEPROM address
#define ADDRESS_3 68 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte1 = 0x7F; // Data for address 1
uint8_t dataByte2 = 0x33; // Data for address 2
uint8_t dataByte3 = 0xCE; // Data for address 3
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
Fungsi "pembaruan" memeriksa terlebih dahulu untuk melihat apakah nilai itu sudah ada di sana, untuk menghemat penulisan yang tidak perlu, mempertahankan umur EEPROM. Namun, melakukan ini untuk lokasi yang sangat banyak dapat memakan waktu yang cukup lama. Mungkin lebih baik untuk memeriksa satu lokasi. Jika ini adalah nilai yang diinginkan, maka pembaruan lainnya dapat dilewati sepenuhnya. Sebagai contoh:
if(eeprom_read_byte((uint8_t*)SOME_LOCATION) != DESIRED_VALUE){
eeprom_write_byte((uint8_t*)SOME_LOCATION, DESIRED_VALUE);
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
eeprom_update_byte((uint8_t*)ADDRESS_2, dataByte2);
eeprom_update_byte((uint8_t*)ADDRESS_3, dataByte3);
}
Jika Anda ingin memperbarui data dalam jumlah besar, coba gunakan fungsi lain seperti eeprom_update_block(...)
. Dan pasti baca tutorial itu; itu ditulis dengan baik.
Anda bisa meletakkan semua pernyataan pembaruan EEPROM dalam satu pernyataan bersyarat preprocessor tunggal. Ini sangat mudah dilakukan:
#if defined _UPDATE_EEPROM_
#define ADDRESS_1 46 // This could be anything from 0 to the highest EEPROM address
uint8_t dataByte = 0x7F; // Data for address 1
eeprom_update_byte((uint8_t*)ADDRESS_1, dataByte1);
#endif // _UPDATE_EEPROM_
Sedikit kode ini bahkan tidak akan dikompilasi kecuali jika Anda melakukan hal berikut:
#define _UPDATE_EEPROM_
Anda dapat meninggalkan ini di sana sebagai komentar, lalu batalkan komentar jika Anda perlu mengubah nilai EEPROM default. Untuk informasi lebih lanjut tentang preprosesor C, lihat manual online ini . Saya pikir Anda mungkin paling tertarik pada bagian tentang makro dan pernyataan kondisional.