はい、デフォルトのデータをソースコードのEEPROMに手動で書き込むことができます。まず、AVRを備えたEEPROMに関するこの素晴らしいガイドをチェックしてください:DeanのAVR EEPROMチュートリアル。また、ソースコードと共にデバイスにプログラムされるメイクファイルを使用して、EEPROMデータを含む.eepファイルを作成することをお勧めします。ただし、さまざまなメイクファイルやリンカーの操作に慣れていない場合でも、ソースコードファイル内から実行できます。これは、回路に電源が投入されるとすぐに発生し、初期プログラム操作が停止します。
プログラムの最初(メインループの前)では、次のようなことができます。
#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の寿命を維持します。ただし、非常に多くの場所でこれを行うには、かなりの時間がかかる場合があります。1つの場所を確認することをお勧めします。必要な値であれば、残りの更新は完全にスキップできます。例えば:
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更新ステートメントを1つのプリプロセッサー条件ステートメントに入れることができます。これは非常に簡単です。
#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プリプロセッサの詳細については、このオンラインマニュアルをご覧ください。マクロと条件文のセクションに最も興味があると思います。