1

PIC の電源を切った後でも、PIC24F のデータ値の永続性 (保存) について質問があります。

データシートを読みましたが、EEPROM とフラッシュ メモリの違いについて混乱しています。

たとえば、変数 "x" があるとします。PIC がオフになった後でも "x" の値を維持する方法はありますか? コードがスタンドアロン オペレーション (COE_OFF) でコンパイルされている限り、プログラムはフラッシュ メモリに保持できることはわかっています。ただし、特にデータ値について疑問があります。

プログラムメモリとデータ値のメモリを不揮発化すると、電源を切っても保持されますか?

値を「静的」として宣言する必要がありますか? 例: static int x; ?

それとも私が間違っていて、電源を切ってもデータ値が保持される方法はありませんか?

助けと説明をありがとう!

4

3 に答える 3

1

デバイスのデータシートを読んだように、TBLWTL および TBLWTH 命令を使用してページ単位でフラッシュに書き込む必要があります。これは通常、ブートローダーを介してソフトウェアを更新するためのものであり、これが求めているものとは思えません。

EEPROM にアクセスするには、より小さな単位で行うことができます。また、メモリ マップ内のどこに変数が存在するかを宣言するためのコンパイラ コンビニエンス マクロがあります。変数が EEPROM に存在するように指定すると、コンパイラはそれにアクセスして更新するための命令を生成します。また、コンパイラ組み込み関数または TBL 命令を使用して直接読み取ることもできます。

宣言はおそらく次のようになります。

unsigned __attribute__((space(eedata), aligned(2)) my_eeprom_variable;

生成されたアセンブラを見て、変数にアクセスしたときにコンパイラが何をするかを確認してください。

変数の宣言には、static従来の C セマンティクスしかありません。変数のスコープと初期化規則を制御します。

于 2013-02-22T03:48:46.687 に答える
0

回答ありがとうございます!

他のいくつかの提案の後、MPLAB C30コンパイラのデータシートをもう一度読み、「persistent」属性を見つけました。

データシートによると:

「persistent属性は、起動時に変数を初期化またはクリアしてはならないことを指定します。persistent属性を持つ変数は、デバイスのリセット後も有効な状態情報を格納するために使用できます。」

これを使って、うまくいくかどうか試してみます。

于 2013-02-22T07:57:37.173 に答える
0

電源をオフにすると、レジスタおよび RAM 変数の内容は失われます。フラッシュと EEPROM はどちらも永続的です。フラッシュは大きなブロック (タイプによっては 128K 以上) でのみ消去できます。EEPROM ワードは個別に読み書きできます。EEPROM をお持ちの場合は、少量のデータを保存するための最善の策です。通常、EEPROM をシリアルに読み書きする必要があります。

于 2013-02-22T02:00:38.543 に答える