在 XC888 微 Controller 上编程,我想在外部存储器 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?

最佳答案

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

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

链接器配置是否错误?

关于C51 编译器 - 写入 xdata,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15100820/

10-11 23:02