在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中定义缓冲区的情况下这样做时,它完全可以工作。我做错了什么?有没有什么特殊的方法需要写到扩展数据中?
发布于 2013-02-27 19:00:16
XRAM不应该在0xF000 (而不是0x000000)吗?根据这里的图7:
http://www.keil.com/dd/docs/datashts/infineon/xc88xclm_ds.pdf
是不是链接器的配置有问题?
发布于 2013-02-27 07:08:24
对缓冲区使用volatile关键字,编译器很可能会跳过变量。如果您将一个值写入内存或I/O空间,但没有观察到该值或任何更改,则很可能您的变量已被编译器优化。
https://stackoverflow.com/questions/15100820
复制相似问题