2

これが私の質問です。

私は、宇宙プロジェクトのために自社で製造したボードに組み込まれたアプリケーションに取り組んでいます。このボードは、SPARC v8 の派生である LEON2 プロセッサを使用し、OS として RTEMS も使用します。

このアプリケーションでは、FS のさまざまなテーブルのデフォルト値を EEPROM に保存する必要があります。これにより、ユーザーは毎回行う必要なく、好きなように変更できます。

これを実現するために、新しいセクション (.eeprom_data) を作成し、EEPROM 内のアドレス 0x6007cc40 に配置しました。これは、仕様ファイルとカスタム リンカー スクリプトを使用して行われました。このスクリプトは、セクションを正しいアドレスに配置し、特定の変数をこの同じセクションに配置するようコンパイラに指示しました。

この点に関してはうまく機能しているようです。以下は、セクションと 1 つの特定の var の objdump の抜粋です。

6 .eeprom_data  000033c0  6007cc40  6007cc40  00038a80  2**3
              CONTENTS, ALLOC, LOAD, DATA

6007fbda g     O .eeprom_data 00000002 Downlink_Priority_Vc1_default_value

唯一の問題は、完全に機能していないように見えることです。私のアプリケーションは問題なく正しく動作しますが、このような単純なテストを実行しても部分的にしか機能しません:

    Eeprom_ChipEnable(TRUE);
    managed_faulty_sectors_default_crc = 0x789A;
    tmp = managed_faulty_sectors_default_crc; 
    Eeprom_ChipEnable(FALSE);

EEPROM に 0x789A を書き込む必要がある書き込み操作はまったく何もしませんが、読み取り操作は完全に機能し、メモリに保存されているデータを正しく返します。

この問題を解決する方法がよくわからないので、誰かが私に手を差し伸べてくれることを願っています。

ありがとう、レオ。

4

3 に答える 3

1

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

何らかの理由で、HW エンジニアが私たちのボードを設計したとき、彼らは単一の 16 ビット アドレスのアドレス指定を許可せず、32 ビット アドレスのみを指定しました。

于 2009-12-08T14:51:28.573 に答える
0

最適化フラグを使用してコンパイルしますか? managed_faulty_sectors_default_crc が volatile と宣言されていない限り、コンパイラは書き込みを最適化すると思います。

また、managed_faulty_sectors_default_crc はどのように .eeprom_data セクションにマップされますか?

于 2009-12-04T15:19:43.550 に答える
0

EEPROM を無効にする前に、データ キャッシュ (存在する場合) がフラッシュされていますか? また、EEPROM 変数は揮発性として適切に宣言されていますか?

于 2009-12-04T14:34:48.130 に答える