C51编译器 - 写入xdata

时间:2013-02-26 22:40:23

标签: c embedded microcontroller 8051

在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
}

所以我无法弄清楚我在这里缺少什么。在这两种情况下,都没有数据写入缓冲区。 (使用调试器检查)。我还检查了指针指向它的地址 - >它实际上指向外部存储器(地址0x000000,但是没有任何问题)。

当我这样做而没有在xdata中定义缓冲区时,它完全正常。 我究竟做错了什么?有什么特别的方法我必须写入xdata吗?

2 个答案:

答案 0 :(得分:5)

XRAM不应该在0xF000(不是0x000000)吗?根据图7:

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

链接器配置是否在某处错误?

答案 1 :(得分:0)

对缓冲区使用volatile关键字,编译器会跳过最可能的变量。如果您将值写入内存或I / O空间但未观察到值或任何更改,则很可能您的变量由编译器优化。