0

これは私のセットアップです:

Atmel studio 7.0
avr-gcc
ATmega644PA

デフォルト値をeepromに書き込もうとしています。つまり、コードでは、eeprom の特定の場所に事前定義された値です。

使うことができます:

__attribute__((section(".eeprom")))

これは変数をeepromに入れるために機能しますが、これは変数を自動的に場所にリンクします。変数の保存場所を手動で設定したい。これどうやってするの?

ありがとう!

Ps: これは 300 を超える変数で機能する必要があります

4

3 に答える 3

0

解決策は、プログラミング時に EEPROM を初期化するか、デバイスの各起動時に初期化するかによって異なります。プログラミング時の解決策を記載します(質問から分かる内容です)。

はリンカに「この__attribute__((section(".eeprom")))変数を .eep 出力ファイルに入れます」と言います。.eep ファイルは、EEPROM にフラッシュされる Intel Hex ファイル形式です。変数の特定の場所を定義する場合は、.eep ファイルを手動で生成してフラッシュするか、初期化されていない値に 0xFF を許可する完全な EEPROM マップを実行できます。

__attribute__((section(".eeprom"))) uint8_t eepContent[6] = {0,1,0xFF,3,4,5};

セクションを手動で定義することもできますが、これは、先頭にない EEPROM メモリのブロック全体を使用する場合にのみ便利です。

于 2016-08-23T09:57:13.843 に答える
0

ニーズをカプセル化できます。たとえば、次の ASF API を使用できます: http://asf.atmel.com/docs/3.22.0/xmegae/html/nvm_8h.html

次に、デフォルト値を EEPROM に書き込み、加えて init ルーチンがすでにデフォルトを設定しているかどうかを示す識別子を書き込みます。擬似コード:

if defaultWritten == true
myAppDataStruct = readFromEeprom()
else
initEeprom(yourDesiredAddress, myDefaultAppDataStruct)

次に、myAppDataStruct を EEPROM データの表現として使用します。

それ以外の場合は、変数をデータ セクション「.eeprom」に宣言する方法を使用できますが、リンカーがそれを調整します。

于 2016-08-15T14:45:20.267 に答える