首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C51编译器-写入扩展数据

C51编译器-写入扩展数据
EN

Stack Overflow用户
提问于 2013-02-27 06:40:23
回答 2查看 526关注 0票数 4

在XC888单片机上编程时,我想在外部存储器xdata中为一些数据保存一个缓冲区。

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

Header.h

代码语言:javascript
复制
extern ubyte xdata rec_buffer[32];

Function.c

代码语言:javascript
复制
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中定义缓冲区的情况下这样做时,它完全可以工作。我做错了什么?有没有什么特殊的方法需要写到扩展数据中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 19:00:16

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

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

是不是链接器的配置有问题?

票数 5
EN

Stack Overflow用户

发布于 2013-02-27 07:08:24

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15100820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档