C51 编译器 - 写入 xdata

标签 c embedded microcontroller 8051

在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 中定义缓冲区时,它工作得很好。 我究竟做错了什么?有什么特殊的方法可以写入扩展数据吗?

最佳答案

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

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

链接器配置是否有误?

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

相关文章:

algorithm - 寻找在微 Controller 上运行的简单模式匹配算法的想法

python - 如何实现双向 jsonrpc + 扭曲的服务器/客户端

c - 参数 x 尚未声明

c++ - 搜索快速/高效的直方图算法(使用预先指定的 bin)

C:读取文件中第二行后的 Realloc() 会产生垃圾值

c++ - 将 Python HTTP 服务器作为 RPC 服务器嵌入到 C 程序中?

C编程控制GPIO LED

c - tiva c上单步调试和运行程序的不同结果

python - 在c中执行python脚本并获取脚本pid

c - 如何使用 printf 在 c 中打印当前堆栈使用情况?