ได้คุณสามารถเขียนข้อมูลเริ่มต้นไปที่ EEPROM ด้วยตนเองในซอร์สโค้ด ก่อนอื่นให้อ่านคำแนะนำที่ยอดเยี่ยมนี้เกี่ยวกับ EEPROM ด้วย AVR: คณบดี EEPROM Tutorial ของ AVR นอกจากนี้ฉันควรเพิ่มว่าเป็นความคิดที่ดีกว่าในการสร้างไฟล์ .eep ที่มีข้อมูล EEPROM โดยใช้ makefile ซึ่งจะถูกโปรแกรมไปยังอุปกรณ์พร้อมกับซอร์สโค้ด อย่างไรก็ตามหากคุณไม่คุ้นเคยกับการใช้งาน makefile และ linker ต่าง ๆ คุณสามารถทำได้จากไฟล์ซอร์สโค้ดของคุณ - มันจะเกิดขึ้นทันทีที่วงจรเปิดทำงานซึ่งจะหยุดการทำงานของโปรแกรมเริ่มต้น
ที่จุดเริ่มต้นของโปรแกรม (ก่อนลูปหลักใด ๆ ) คุณสามารถทำสิ่งนี้:
#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);
ฟังก์ชัน "อัพเดต" จะตรวจสอบก่อนเพื่อดูว่ามีค่านั้นอยู่หรือไม่เพื่อบันทึกการเขียนที่ไม่จำเป็นโดยรักษาอายุการใช้งาน EEPROM ไว้ อย่างไรก็ตามการทำเช่นนี้สำหรับสถานที่หลายแห่งอาจใช้เวลาค่อนข้างนาน มันอาจจะดีกว่าที่จะตรวจสอบสถานที่เดียว หากเป็นค่าที่ต้องการสามารถอัปเดตส่วนที่เหลือทั้งหมดได้โดยสมบูรณ์ ตัวอย่างเช่น:
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);
}
หากคุณกำลังมองหาเพื่อปรับปรุงข้อมูลจำนวนมากให้ลองใช้ฟังก์ชั่นอื่น ๆ eeprom_update_block(...)
เช่น และแน่นอนอ่านกวดวิชานั้น มันเขียนได้ดี
คุณสามารถวางคำสั่งการอัพเดท EEPROM ทั้งหมดไว้ในคำสั่งเงื่อนไขตัวประมวลผลเดี่ยว ง่ายมากที่จะทำ:
#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_
โค้ดนี้จะไม่ถูกคอมไพล์แม้คุณจะทำสิ่งต่อไปนี้:
#define _UPDATE_EEPROM_
คุณสามารถทิ้งสิ่งนี้ไว้เป็นความคิดเห็นและไม่แสดงข้อคิดเห็นหากคุณต้องการเปลี่ยนค่า EEPROM เริ่มต้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวประมวลผลล่วงหน้า C โปรดดูคู่มือออนไลน์นี้ ฉันคิดว่าคุณอาจสนใจในส่วนต่างๆของมาโครและข้อความแสดงเงื่อนไข