4

在 XC888 微控制器上编程,我想为外部存储器中的一些数据保存一个缓冲区xdata

我正在这样做(只是一个例子,我去掉了不必要的代码):

头文件.h

extern ubyte xdata rec_buffer[32];

函数.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 吗?

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 回答