4

XC888 マイクロコントローラでのプログラミングで、一部のデータのバッファを外部メモリに保存したいと考えていますxdata

私はこのようにしています(不要なコードを取り除いた単なる例です):

Header.h

extern ubyte xdata rec_buffer[32];

Function.c

ubyte xdata rec_buffer[32] = {0};

void foo()
{
    //Option 1
    rec_buffer[0] = 0xFF;    // Doesn't work

    //Option 2
    ubyte xdata *ptr_buf = rec_buffer;
    ptr_buf[0] = 0xFF        // Doesn't work
}

だから私はここで何が欠けているのか分かりません。どちらの場合も、バッファに書き込まれるデータはありません。(デバッガーで確認しました)。ポインターが指すアドレスも確認しました->実際には外部メモリを指しています( Address 0x000000、しかし、それは何も悪いことではありません)。

でバッファを定義せずに実行すると、xdataまったく問題なく動作します。私は何を間違っていますか?xdata に書き込む特別な方法はありますか?

4

2 に答える 2

5

XRAM は0xF000(ではない0x000000) にあるべきではありませんか? ここの図7によると:

http://www.keil.com/dd/docs/datashts/infineon/xc88xclm_ds.pdf

リンカーの設定がどこか間違っていますか?

于 2013-02-27T11:00:15.543 に答える
0

バッファーに volatile キーワードを使用します。ほとんどの場合、変数はコンパイラーによってスキップされます。メモリまたは I/O 空間に値を書き込んでも、その値や変化が見られない場合は、おそらく変数がコンパイラによって最適化されています。

于 2013-02-26T23:08:23.587 に答える